Scraper

In [1]:
import sys
import urllib.request
from urllib.request import Request, urlopen
from urllib.request import URLError, HTTPError
from urllib.parse import quote
import http.client
from http.client import IncompleteRead, BadStatusLine
http.client._MAXHEADERS = 1000

import time
import os
import ssl
import datetime
import json
import socket
from fake_useragent import UserAgent
import chromedriver_binary
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import webdrivermanager
from keras import applications
Using TensorFlow backend.
In [2]:
class image_download:
    """
    Class based on google-images-download module created by hardikvasa.
    I applied few changes and remove unnecessary methods to make class smaller,
    more suitable for my needs and supported with documentation.
    """
    def __init__(self, arguments):
        self.arguments = arguments
        pass

    # Downloading entire Web Document (Raw Page Content)
    def download_page(self,url):
        """
        Method downloading page as raw text.
        :param str url - url to the page we want to download.
        :returns:
            - str text - raw text of HTML page.
        """
        try:
            ua = UserAgent()
            headers = {'User-Agent':ua.chrome}
            
            req = urllib.request.Request(url, headers=headers)
            text = str(urllib.request.urlopen(req).read())
            return text
        
        except Exception as e:
            print("Could not open URL. Please check your internet connection.")
            sys.exit()
            
    def download_extended_page(self, url):
        """
        Method downloading whole page from top to the bottom. Useful
        when page don't load to the bottom before scrolling.
        
        :param str url - url to the page we want to download.
        :returns:
            - str source - raw text of HTML page.
        """
        options = webdriver.ChromeOptions()
        options.add_argument('--no-sandbox')
        options.add_argument("--headless")

        try:
            browser = webdriver.Chrome(options=options)
        except Exception as e:
            print("Looks like we cannot locate the path the 'chromedriver' or google chrome browser is not "
                  "installed on your machine (exception: %s)" % e)
            sys.exit()
        browser.set_window_size(1024, 768)

        # Open the link
        browser.get(url)
        time.sleep(1)
        print("Getting you a lot of images. This may take a few moments...")

        element = browser.find_element_by_tag_name("body")
        # Scroll down
        for i in range(30):
            element.send_keys(Keys.PAGE_DOWN)
            time.sleep(0.3)

        try:
            browser.find_element_by_id("smb").click()
            for i in range(50):
                element.send_keys(Keys.PAGE_DOWN)
                time.sleep(0.3)  # bot id protection
        except:
            for i in range(10):
                element.send_keys(Keys.PAGE_DOWN)
                time.sleep(0.3)  # bot id protection

        print("Reached end of Page.")
        time.sleep(0.5)

        source = browser.page_source #page source
        #close the browser
        browser.close()
        return source
        

    def format_object(self,my_object):
        """
        Method creating new dictionary with more readable keys.
        :param dict my_object - dictionary obtained as json.loads() result.
        :returns:
            - dict formatted_object - new more readable dict.
        """
        formatted_object = {}
        formatted_object['image_format'] = my_object['ity']
        formatted_object['image_link'] = my_object['ou']
        formatted_object['image_source'] = my_object['ru']
        return formatted_object
    
    
    # make directories
    def create_directories(self, dir_name):
        """
        Method creating new directory if not exist.
        :param str dir_name - path to the root dictionary.
        """
        path_name = dir_name
        if not os.path.isdir(path_name):
            os.makedirs(path_name)
        return
    
    def handle_exception(self, error):
        """
        Method handling exceptions which occurred during downloading images.
        :param error - error which occurred during downloading images.
        :returns:
            - str download_status - info about download status.
            - str download_message - info about error.
            - str return_image_name - empty info about image filename - because download failed.
            - str absolute_path - empty path to the downloaded file - because download failed.
        """
        download_status = 'fail'
        download_message = "Error occurred ====> " + str(error) + '\t ...trying next one...'
        return_image_name = ''
        absolute_path = ''
        return download_status, download_message, return_image_name, absolute_path
        
    # Download Images
    def download_image(self,image_url, image_format, dir_name, count):
        """
        Method handling exceptions which occurred during downloading images.
        :param str image_url - link to the image.
        :param str image_format - format of the image.
        :param str dir_name - path to the directory.
        :param str count - index of image in particular class.
        :returns:
            - str download_status - info about download status.
            - str download_message - info about downloaded file.
            - str return_image_name - info about image filename.
            - str absolute_path -path to the downloaded file.
        """
        try:
            ua = UserAgent()
            req = Request(image_url, headers = {'User-Agent':ua.chrome})
            try:
                # timeout time to download an image
                timeout = 10

                response = urlopen(req, None, timeout)
                data = response.read()
                response.close()

                extensions = [".jpg", ".jpeg", ".png", ".bmp"]
                # keep everything after the last '/'
                image_name = self.arguments['image_name'].replace(' ', '_')
               

                if image_format == "" or not image_format or "." + image_format not in extensions:
                    download_status, download_message, return_image_name, absolute_path  = self.handle_exception("Invalid or missing image format.")
                    return download_status, download_message, return_image_name, absolute_path
                
                elif image_name.lower().find("." + image_format) < 0:
                    image_name = image_name + "." + image_format
                    
                else:
                    image_name = image_name[:image_name.lower().find("." + image_format) + (len(image_format) + 1)]


                path = dir_name + "/" + str(count) + "." + image_name
                
                files = os.listdir('data_food_classifier_MG')
                if sum([1 if str(count) + "." + self.arguments['image_name'].replace(' ', '_') in s else 0 for s in files]):
                    count = max([int(s.split('.')[0]) for s in files if self.arguments['image_name'].replace(' ', '_') in s]) + 1
                    path = dir_name + "/" + str(count) + "." + image_name

                try:
                    output_file = open(path, 'wb')
                    output_file.write(data)
                    output_file.close()
                   
                    absolute_path = os.path.abspath(path)
                except OSError as e:
                    download_status, download_message, return_image_name, absolute_path = self.handle_exception(e)


                #return image name back to calling method to use it for thumbnail downloads
                download_status = 'success'
                download_message = "Completed Image ====> "  + str(count) + "." + image_name
                return_image_name = str(count) + "." + image_name

               
            except (UnicodeEncodeError, URLError, BadStatusLine) as e:
                download_status, download_message, return_image_name, absolute_path = self.handle_exception(e)


        except (HTTPError, URLError, ssl.CertificateError, IOError, IncompleteRead)  as e:  # If there is any HTTPError
            download_status, download_message, return_image_name, absolute_path = self.handle_exception(e)

        return download_status, download_message, return_image_name, absolute_path
    
    
    def _get_next_item(self,s):
        """
        Method finding next image from the given raw page.
        :param str s - page raw text.
        :returns:
            - str final_object - encoded json.
            - str end_object - div ending the current image.
        """
        start_line = s.find('rg_meta notranslate')
        if start_line == -1:  # If no links are found then give an error!
            end_quote = 0
            link = "no_links"
            return link, end_quote
        else:
            start_line = s.find('class="rg_meta notranslate">')
            start_object = s.find('{', start_line + 1)
            end_object = s.find('</div>', start_object + 1)
            object_raw = str(s[start_object:end_object])
          
            
            try:
                object_decode = bytes(object_raw, "utf-8").decode("unicode_escape")
                final_object = json.loads(object_decode)
            except:
                final_object = ""
          
            return final_object, end_object
        
        
        # Getting all links with the help of '_images_get_next_image'
    def _get_all_items(self, page, dir_name, limit, attempts=0):
        """
        Method getting all links with help of the '_images_get_next_image'.
        :param str page - page raw text.
        :param str dir_name - path to the directory.
        :param int limit - number of images to download.
        :param int attempts - number of attempts to download image (max 3).
        :returns:
            - int errorCount - number of encountered errors.
        """
        errorCount = 0
        i = 0
        count = 1
        while count < limit+1:
            final_object, end_content = self._get_next_item(page)
            if final_object == "no_links":
                break
            elif final_object == "":
                page = page[end_content:]
            
            else:
                #format the item for readability
                final_object = self.format_object(final_object)
               

                #download the images
                download_status, download_message, return_image_name, absolute_path = self.download_image(final_object['image_link'],
                                                                                                       final_object['image_format'],
                                                                                                       dir_name,
                                                                                                       count)
              
                print(download_message)
                if download_status == "success":
                    count += 1
                    final_object['image_filename'] = return_image_name
                else:
                    errorCount += 1

               
                page = page[end_content:]
            i += 1
        if count - 1 == 0 and attempts < 3:
            print('Internet connection is lost or there is no images with given name. \t ...trying again')
            time.sleep(10)
            attempts += 1
            self._get_all_items(page, dir_name, limit, attempts)
        elif count < limit:
            print("\n\nUnfortunately all " + str(
                limit) + " could not be downloaded because some images were not downloadable. " + str(
                count-1) + " is all we got for this search filter!")
        return errorCount


    def download_executor(self):
        """
        Method starting download processes.
        :returns:
            - list errors - list of errors.
        """
        errorCount = None
        
        ######Initialization and Validation of user arguments
        if self.arguments['keywords']:
            search_keyword = [str(item) for item in self.arguments['keywords'].split(',')]


        # Setting limit on number of images to be downloaded
        if self.arguments['limit']:
            limit = int(self.arguments['limit'])
        else:
            limit = 100
     

        total_errors = 0
       
        i = 0
        while i < len(search_keyword):      # 3.for every main keyword
            iteration = "\n" + "Item no.: " + str(i + 1) + " -->" + " Item name = " + (search_keyword[i])

            print("Downloading images for: " + (search_keyword[i]) + " ...")
            search_term = search_keyword[i]


            dir_name = 'data_food_classifier_MG'  #sub-directory

            self.create_directories(dir_name)     #create directories in OS


            url = 'https://www.google.com/search?q=' + quote(
            search_term.encode('utf-8')) + '&espv=2&biw=1366&bih=667&site=webhp&source=lnms&tbm=isch&tbs=&sa=X&ei=XosDVaCXD8TasATItgE&ved=0CAcQ_AUoAg'
            
            if limit < 101:
                raw_html = self.download_page(url)  # download page
            else:
                raw_html = self.download_extended_page(url)


            errorCount= self._get_all_items(raw_html,dir_name,limit)    #get all image items and download images

            #dumps into a json file

            i += 1
            total_errors = total_errors + errorCount
                   
        return total_errors
In [3]:
def scrap_images(keyword, limit, image_name):
    arguments = {"keywords":keyword, "limit":limit, "image_name":image_name}
    total_errors = 0
    t0 = time.time()  # start the timer

    downloader = image_download(arguments)
    errors = downloader.download_executor()  #wrapping response in a variable just for consistency
    total_errors = total_errors + errors

    t1 = time.time()  # stop the timer
    total_time = t1 - t0  # Calculating the total time required to crawl, find and download all the links of 60,000 images
    print("\nEverything downloaded!")
    print("Total errors: " + str(total_errors))
    print("Total time taken: " + str(total_time) + " Seconds")
In [4]:
scrap_images('fast food', 300, 'fast food')
Downloading images for: fast food ...
Getting you a lot of images. This may take a few moments...
Reached end of Page.
Completed Image ====> 1.fast_food.jpg
Completed Image ====> 2.fast_food.jpg
Completed Image ====> 3.fast_food.jpg
Completed Image ====> 4.fast_food.jpg
Completed Image ====> 5.fast_food.jpg
Completed Image ====> 6.fast_food.jpg
Completed Image ====> 7.fast_food.jpeg
Completed Image ====> 8.fast_food.jpg
Completed Image ====> 9.fast_food.jpg
Completed Image ====> 10.fast_food.jpg
Completed Image ====> 11.fast_food.jpg
Completed Image ====> 12.fast_food.jpg
Completed Image ====> 13.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 14.fast_food.jpg
Completed Image ====> 15.fast_food.jpg
Completed Image ====> 16.fast_food.jpg
Completed Image ====> 17.fast_food.jpg
Completed Image ====> 18.fast_food.jpg
Error occurred ====> <urlopen error _ssl.c:761: The handshake operation timed out>	 ...trying next one...
Completed Image ====> 19.fast_food.jpg
Completed Image ====> 20.fast_food.jpg
Error occurred ====> <urlopen error timed out>	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 21.fast_food.jpg
Completed Image ====> 22.fast_food.jpg
Completed Image ====> 23.fast_food.jpg
Completed Image ====> 24.fast_food.jpg
Completed Image ====> 25.fast_food.jpg
Completed Image ====> 26.fast_food.jpg
Completed Image ====> 27.fast_food.jpg
Completed Image ====> 28.fast_food.jpg
Completed Image ====> 29.fast_food.jpg
Completed Image ====> 30.fast_food.jpeg
Completed Image ====> 31.fast_food.jpg
Completed Image ====> 32.fast_food.jpg
Completed Image ====> 33.fast_food.jpg
Completed Image ====> 34.fast_food.jpg
Completed Image ====> 35.fast_food.jpg
Completed Image ====> 36.fast_food.jpg
Completed Image ====> 37.fast_food.jpg
Completed Image ====> 38.fast_food.jpg
Completed Image ====> 39.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 40.fast_food.jpg
Completed Image ====> 41.fast_food.jpg
Completed Image ====> 42.fast_food.jpg
Completed Image ====> 43.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 44.fast_food.jpg
Completed Image ====> 45.fast_food.jpg
Completed Image ====> 46.fast_food.jpg
Completed Image ====> 47.fast_food.png
Completed Image ====> 48.fast_food.jpg
Error occurred ====> HTTP Error 502: Bad Gateway	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 49.fast_food.jpg
Completed Image ====> 50.fast_food.jpg
Completed Image ====> 51.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 52.fast_food.jpg
Completed Image ====> 53.fast_food.jpg
Completed Image ====> 54.fast_food.jpg
Completed Image ====> 55.fast_food.jpeg
Completed Image ====> 56.fast_food.jpg
Completed Image ====> 57.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 58.fast_food.jpg
Completed Image ====> 59.fast_food.jpg
Completed Image ====> 60.fast_food.png
Completed Image ====> 61.fast_food.jpg
Completed Image ====> 62.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 63.fast_food.jpg
Completed Image ====> 64.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 65.fast_food.jpg
Completed Image ====> 66.fast_food.jpg
Completed Image ====> 67.fast_food.jpg
Completed Image ====> 68.fast_food.png
Completed Image ====> 69.fast_food.jpeg
Completed Image ====> 70.fast_food.jpg
Completed Image ====> 71.fast_food.jpg
Completed Image ====> 72.fast_food.jpg
Completed Image ====> 73.fast_food.jpg
Completed Image ====> 74.fast_food.jpg
Completed Image ====> 75.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> <urlopen error [Errno 11001] getaddrinfo failed>	 ...trying next one...
Completed Image ====> 76.fast_food.jpg
Completed Image ====> 77.fast_food.jpg
Completed Image ====> 78.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 79.fast_food.jpg
Completed Image ====> 80.fast_food.jpg
Completed Image ====> 81.fast_food.jpg
Completed Image ====> 82.fast_food.jpg
Completed Image ====> 83.fast_food.jpg
Completed Image ====> 84.fast_food.jpg
Completed Image ====> 85.fast_food.jpg
Completed Image ====> 86.fast_food.jpg
Completed Image ====> 87.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 88.fast_food.jpg
Completed Image ====> 89.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 90.fast_food.jpg
Completed Image ====> 91.fast_food.jpg
Completed Image ====> 92.fast_food.jpeg
Completed Image ====> 93.fast_food.jpg
Completed Image ====> 94.fast_food.jpg
Completed Image ====> 95.fast_food.jpg
Completed Image ====> 96.fast_food.jpg
Completed Image ====> 97.fast_food.jpg
Completed Image ====> 98.fast_food.jpg
Completed Image ====> 99.fast_food.jpg
Completed Image ====> 100.fast_food.png
Completed Image ====> 101.fast_food.jpg
Completed Image ====> 102.fast_food.jpg
Completed Image ====> 103.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 104.fast_food.jpg
Completed Image ====> 105.fast_food.jpg
Completed Image ====> 106.fast_food.jpg
Completed Image ====> 107.fast_food.jpg
Completed Image ====> 108.fast_food.jpg
Completed Image ====> 109.fast_food.jpg
Completed Image ====> 110.fast_food.jpg
Completed Image ====> 111.fast_food.jpg
Completed Image ====> 112.fast_food.jpg
Completed Image ====> 113.fast_food.jpeg
Completed Image ====> 114.fast_food.jpg
Completed Image ====> 115.fast_food.jpeg
Completed Image ====> 116.fast_food.jpg
Completed Image ====> 117.fast_food.jpg
Completed Image ====> 118.fast_food.jpg
Error occurred ====> <urlopen error [Errno 11002] getaddrinfo failed>	 ...trying next one...
Completed Image ====> 119.fast_food.jpg
Completed Image ====> 120.fast_food.jpg
Completed Image ====> 121.fast_food.png
Error occurred ====> HTTP Error 403: Forbidden	 ...trying next one...
Completed Image ====> 122.fast_food.jpeg
Completed Image ====> 123.fast_food.jpg
Completed Image ====> 124.fast_food.jpg
Completed Image ====> 125.fast_food.jpg
Completed Image ====> 126.fast_food.jpg
Completed Image ====> 127.fast_food.jpg
Completed Image ====> 128.fast_food.jpg
Completed Image ====> 129.fast_food.jpg
Completed Image ====> 130.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 131.fast_food.jpg
Completed Image ====> 132.fast_food.png
Completed Image ====> 133.fast_food.png
Completed Image ====> 134.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 135.fast_food.jpg
Completed Image ====> 136.fast_food.jpg
Completed Image ====> 137.fast_food.jpg
Completed Image ====> 138.fast_food.jpeg
Completed Image ====> 139.fast_food.jpg
Completed Image ====> 140.fast_food.jpg
Completed Image ====> 141.fast_food.jpg
Completed Image ====> 142.fast_food.jpg
Completed Image ====> 143.fast_food.jpg
Completed Image ====> 144.fast_food.jpg
Completed Image ====> 145.fast_food.jpeg
Completed Image ====> 146.fast_food.jpg
Completed Image ====> 147.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 148.fast_food.jpg
Completed Image ====> 149.fast_food.jpg
Completed Image ====> 150.fast_food.jpg
Completed Image ====> 151.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 152.fast_food.jpg
Completed Image ====> 153.fast_food.jpg
Completed Image ====> 154.fast_food.jpg
Completed Image ====> 155.fast_food.jpg
Completed Image ====> 156.fast_food.jpg
Completed Image ====> 157.fast_food.jpg
Completed Image ====> 158.fast_food.jpg
Completed Image ====> 159.fast_food.jpg
Completed Image ====> 160.fast_food.jpg
Completed Image ====> 161.fast_food.jpg
Completed Image ====> 162.fast_food.jpg
Completed Image ====> 163.fast_food.jpg
Completed Image ====> 164.fast_food.jpg
Completed Image ====> 165.fast_food.jpg
Completed Image ====> 166.fast_food.jpg
Completed Image ====> 167.fast_food.jpg
Completed Image ====> 168.fast_food.jpg
Completed Image ====> 169.fast_food.jpg
Completed Image ====> 170.fast_food.jpg
Completed Image ====> 171.fast_food.jpg
Completed Image ====> 172.fast_food.jpg
Completed Image ====> 173.fast_food.jpeg
Completed Image ====> 174.fast_food.jpg
Completed Image ====> 175.fast_food.jpg
Completed Image ====> 176.fast_food.jpg
Completed Image ====> 177.fast_food.jpg
Completed Image ====> 178.fast_food.jpg
Completed Image ====> 179.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 180.fast_food.jpg
Completed Image ====> 181.fast_food.png
Completed Image ====> 182.fast_food.jpg
Completed Image ====> 183.fast_food.jpg
Completed Image ====> 184.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 185.fast_food.jpg
Completed Image ====> 186.fast_food.jpg
Completed Image ====> 187.fast_food.jpg
Completed Image ====> 188.fast_food.jpg
Completed Image ====> 189.fast_food.jpg
Completed Image ====> 190.fast_food.jpg
Completed Image ====> 191.fast_food.jpg
Completed Image ====> 192.fast_food.jpg
Completed Image ====> 193.fast_food.png
Completed Image ====> 194.fast_food.jpg
Completed Image ====> 195.fast_food.jpg
Completed Image ====> 196.fast_food.jpg
Completed Image ====> 197.fast_food.jpg
Completed Image ====> 198.fast_food.jpg
Completed Image ====> 199.fast_food.jpg
Completed Image ====> 200.fast_food.jpg
Completed Image ====> 201.fast_food.jpg
Completed Image ====> 202.fast_food.jpg
Completed Image ====> 203.fast_food.jpg
Completed Image ====> 204.fast_food.jpg
Completed Image ====> 205.fast_food.jpg
Completed Image ====> 206.fast_food.jpg
Completed Image ====> 207.fast_food.jpg
Completed Image ====> 208.fast_food.jpg
Completed Image ====> 209.fast_food.jpg
Completed Image ====> 210.fast_food.jpg
Completed Image ====> 211.fast_food.jpg
Completed Image ====> 212.fast_food.jpg
Completed Image ====> 213.fast_food.jpg
Completed Image ====> 214.fast_food.jpg
Completed Image ====> 215.fast_food.jpg
Completed Image ====> 216.fast_food.jpg
Completed Image ====> 217.fast_food.jpg
Completed Image ====> 218.fast_food.jpeg
Completed Image ====> 219.fast_food.jpg
Completed Image ====> 220.fast_food.jpg
Completed Image ====> 221.fast_food.jpg
Completed Image ====> 222.fast_food.png
Completed Image ====> 223.fast_food.jpg
Completed Image ====> 224.fast_food.jpg
Completed Image ====> 225.fast_food.jpg
Completed Image ====> 226.fast_food.jpg
Completed Image ====> 227.fast_food.jpeg
Completed Image ====> 228.fast_food.jpg
Completed Image ====> 229.fast_food.jpg
Completed Image ====> 230.fast_food.jpg
Completed Image ====> 231.fast_food.jpg
Completed Image ====> 232.fast_food.jpg
Completed Image ====> 233.fast_food.jpg
Completed Image ====> 234.fast_food.jpg
Completed Image ====> 235.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 236.fast_food.jpg
Completed Image ====> 237.fast_food.jpg
Completed Image ====> 238.fast_food.jpg
Completed Image ====> 239.fast_food.jpg
Completed Image ====> 240.fast_food.jpg
Completed Image ====> 241.fast_food.jpg
Completed Image ====> 242.fast_food.jpg
Completed Image ====> 243.fast_food.jpg
Completed Image ====> 244.fast_food.jpg
Completed Image ====> 245.fast_food.jpg
Completed Image ====> 246.fast_food.jpg
Completed Image ====> 247.fast_food.jpg
Completed Image ====> 248.fast_food.jpg
Completed Image ====> 249.fast_food.jpg
Completed Image ====> 250.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 251.fast_food.jpg
Completed Image ====> 252.fast_food.jpg
Completed Image ====> 253.fast_food.jpg
Completed Image ====> 254.fast_food.jpg
Completed Image ====> 255.fast_food.jpg
Completed Image ====> 256.fast_food.jpg
Completed Image ====> 257.fast_food.jpg
Completed Image ====> 258.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 259.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 260.fast_food.jpg
Completed Image ====> 261.fast_food.jpg
Completed Image ====> 262.fast_food.jpg
Completed Image ====> 263.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 264.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 265.fast_food.png
Completed Image ====> 266.fast_food.jpg
Completed Image ====> 267.fast_food.png
Completed Image ====> 268.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 269.fast_food.jpg
Completed Image ====> 270.fast_food.jpg
Completed Image ====> 271.fast_food.jpg
Completed Image ====> 272.fast_food.png
Completed Image ====> 273.fast_food.jpg
Completed Image ====> 274.fast_food.png
Completed Image ====> 275.fast_food.jpg
Completed Image ====> 276.fast_food.jpg
Completed Image ====> 277.fast_food.jpg
Completed Image ====> 278.fast_food.jpg
Completed Image ====> 279.fast_food.jpg
Completed Image ====> 280.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 281.fast_food.jpg
Completed Image ====> 282.fast_food.jpg
Completed Image ====> 283.fast_food.jpg
Completed Image ====> 284.fast_food.jpg
Completed Image ====> 285.fast_food.png
Completed Image ====> 286.fast_food.jpg
Completed Image ====> 287.fast_food.jpg
Completed Image ====> 288.fast_food.jpg
Completed Image ====> 289.fast_food.jpeg
Completed Image ====> 290.fast_food.jpg
Completed Image ====> 291.fast_food.jpg
Completed Image ====> 292.fast_food.jpg
Completed Image ====> 293.fast_food.jpg
Completed Image ====> 294.fast_food.jpg
Completed Image ====> 295.fast_food.png
Completed Image ====> 296.fast_food.jpg
Completed Image ====> 297.fast_food.jpg
Completed Image ====> 298.fast_food.jpg
Completed Image ====> 299.fast_food.jpg
Completed Image ====> 300.fast_food.png

Everything downloaded!
Total errors: 38
Total time taken: 349.8991823196411 Seconds
In [5]:
scrap_images('hamburger, kebab, pizza, french fries, chicken popeyes, burito', 100, 'fast food')
Downloading images for: hamburger ...
Completed Image ====> 301.fast_food.jpg
Completed Image ====> 302.fast_food.jpg
Completed Image ====> 303.fast_food.jpg
Completed Image ====> 304.fast_food.jpg
Completed Image ====> 305.fast_food.png
Completed Image ====> 306.fast_food.jpg
Completed Image ====> 307.fast_food.jpeg
Completed Image ====> 308.fast_food.jpg
Completed Image ====> 309.fast_food.jpg
Completed Image ====> 310.fast_food.jpg
Completed Image ====> 311.fast_food.jpg
Completed Image ====> 312.fast_food.jpg
Completed Image ====> 313.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 314.fast_food.jpg
Completed Image ====> 315.fast_food.jpg
Completed Image ====> 316.fast_food.jpg
Completed Image ====> 317.fast_food.jpg
Completed Image ====> 318.fast_food.jpg
Completed Image ====> 319.fast_food.jpg
Completed Image ====> 320.fast_food.jpg
Completed Image ====> 321.fast_food.jpg
Completed Image ====> 322.fast_food.jpg
Completed Image ====> 323.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 324.fast_food.jpg
Completed Image ====> 325.fast_food.jpg
Error occurred ====> <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 326.fast_food.jpg
Completed Image ====> 327.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 328.fast_food.jpg
Completed Image ====> 329.fast_food.jpg
Completed Image ====> 330.fast_food.jpg
Completed Image ====> 331.fast_food.jpg
Completed Image ====> 332.fast_food.jpg
Completed Image ====> 333.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 334.fast_food.jpg
Completed Image ====> 335.fast_food.jpg
Completed Image ====> 336.fast_food.jpg
Completed Image ====> 337.fast_food.jpg
Completed Image ====> 338.fast_food.jpg
Completed Image ====> 339.fast_food.jpg
Completed Image ====> 340.fast_food.jpg
Completed Image ====> 341.fast_food.jpg
Completed Image ====> 342.fast_food.jpg
Completed Image ====> 343.fast_food.jpg
Completed Image ====> 344.fast_food.jpg
Completed Image ====> 345.fast_food.jpg
Completed Image ====> 346.fast_food.png
Completed Image ====> 347.fast_food.jpeg
Completed Image ====> 348.fast_food.jpg
Completed Image ====> 349.fast_food.jpg
Completed Image ====> 350.fast_food.jpg
Completed Image ====> 351.fast_food.jpg
Completed Image ====> 352.fast_food.jpg
Completed Image ====> 353.fast_food.jpg
Completed Image ====> 354.fast_food.jpg
Completed Image ====> 355.fast_food.jpg
Completed Image ====> 356.fast_food.jpg
Completed Image ====> 357.fast_food.png
Completed Image ====> 358.fast_food.jpg
Completed Image ====> 359.fast_food.jpg
Completed Image ====> 360.fast_food.jpg
Completed Image ====> 361.fast_food.jpg
Completed Image ====> 362.fast_food.jpg
Completed Image ====> 363.fast_food.jpg
Completed Image ====> 364.fast_food.jpg
Completed Image ====> 365.fast_food.jpg
Completed Image ====> 366.fast_food.jpg
Completed Image ====> 367.fast_food.jpg
Completed Image ====> 368.fast_food.jpg
Completed Image ====> 369.fast_food.jpg
Completed Image ====> 370.fast_food.jpg
Completed Image ====> 371.fast_food.jpg
Completed Image ====> 372.fast_food.jpg
Completed Image ====> 373.fast_food.jpg
Completed Image ====> 374.fast_food.jpg
Completed Image ====> 375.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 376.fast_food.jpg
Completed Image ====> 377.fast_food.jpg
Completed Image ====> 378.fast_food.jpg
Completed Image ====> 379.fast_food.jpg
Completed Image ====> 380.fast_food.jpg
Completed Image ====> 381.fast_food.jpg
Completed Image ====> 382.fast_food.jpg
Completed Image ====> 383.fast_food.jpg
Completed Image ====> 384.fast_food.jpg
Completed Image ====> 385.fast_food.jpg
Completed Image ====> 386.fast_food.jpg
Completed Image ====> 387.fast_food.jpg
Completed Image ====> 388.fast_food.jpg
Completed Image ====> 389.fast_food.jpg
Completed Image ====> 390.fast_food.jpg
Completed Image ====> 391.fast_food.jpg
Completed Image ====> 392.fast_food.jpg
Completed Image ====> 393.fast_food.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 93 is all we got for this search filter!
Downloading images for:  kebab ...
Completed Image ====> 394.fast_food.jpg
Completed Image ====> 395.fast_food.jpg
Completed Image ====> 396.fast_food.jpg
Completed Image ====> 397.fast_food.jpg
Completed Image ====> 398.fast_food.jpg
Completed Image ====> 399.fast_food.jpg
Completed Image ====> 400.fast_food.jpg
Completed Image ====> 401.fast_food.jpg
Completed Image ====> 402.fast_food.png
Completed Image ====> 403.fast_food.jpg
Completed Image ====> 404.fast_food.jpg
Completed Image ====> 405.fast_food.jpg
Completed Image ====> 406.fast_food.jpg
Completed Image ====> 407.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 408.fast_food.jpg
Completed Image ====> 409.fast_food.jpg
Completed Image ====> 410.fast_food.jpg
Completed Image ====> 411.fast_food.jpg
Completed Image ====> 412.fast_food.jpg
Completed Image ====> 413.fast_food.jpg
Completed Image ====> 414.fast_food.png
Completed Image ====> 415.fast_food.jpg
Completed Image ====> 416.fast_food.jpg
Completed Image ====> 417.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 418.fast_food.jpg
Completed Image ====> 419.fast_food.jpg
Completed Image ====> 420.fast_food.jpeg
Completed Image ====> 421.fast_food.jpg
Completed Image ====> 422.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 423.fast_food.jpeg
Completed Image ====> 424.fast_food.jpg
Completed Image ====> 425.fast_food.jpg
Completed Image ====> 426.fast_food.jpg
Completed Image ====> 427.fast_food.jpg
Completed Image ====> 428.fast_food.jpg
Completed Image ====> 429.fast_food.jpg
Completed Image ====> 430.fast_food.jpg
Completed Image ====> 431.fast_food.jpg
Completed Image ====> 432.fast_food.jpeg
Completed Image ====> 433.fast_food.jpg
Completed Image ====> 434.fast_food.jpg
Completed Image ====> 435.fast_food.jpg
Completed Image ====> 436.fast_food.jpg
Completed Image ====> 437.fast_food.jpg
Completed Image ====> 438.fast_food.jpg
Completed Image ====> 439.fast_food.jpg
Completed Image ====> 440.fast_food.jpg
Completed Image ====> 441.fast_food.jpg
Completed Image ====> 442.fast_food.jpg
Completed Image ====> 443.fast_food.jpg
Completed Image ====> 444.fast_food.jpg
Completed Image ====> 445.fast_food.jpg
Completed Image ====> 446.fast_food.jpg
Completed Image ====> 447.fast_food.jpeg
Completed Image ====> 448.fast_food.jpg
Completed Image ====> 449.fast_food.jpg
Completed Image ====> 450.fast_food.jpg
Completed Image ====> 451.fast_food.jpg
Completed Image ====> 452.fast_food.jpg
Completed Image ====> 453.fast_food.jpg
Completed Image ====> 454.fast_food.jpg
Completed Image ====> 455.fast_food.jpg
Completed Image ====> 456.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 457.fast_food.png
Completed Image ====> 458.fast_food.jpg
Completed Image ====> 459.fast_food.jpg
Completed Image ====> 460.fast_food.png
Completed Image ====> 461.fast_food.jpg
Completed Image ====> 462.fast_food.jpg
Completed Image ====> 463.fast_food.jpg
Completed Image ====> 464.fast_food.jpg
Completed Image ====> 465.fast_food.jpg
Completed Image ====> 466.fast_food.png
Completed Image ====> 467.fast_food.jpg
Completed Image ====> 468.fast_food.jpg
Completed Image ====> 469.fast_food.png
Completed Image ====> 470.fast_food.jpg
Completed Image ====> 471.fast_food.jpg
Completed Image ====> 472.fast_food.png
Completed Image ====> 473.fast_food.jpg
Completed Image ====> 474.fast_food.jpg
Completed Image ====> 475.fast_food.jpg
Completed Image ====> 476.fast_food.jpg
Completed Image ====> 477.fast_food.jpg
Completed Image ====> 478.fast_food.jpg
Completed Image ====> 479.fast_food.jpg
Completed Image ====> 480.fast_food.jpg
Completed Image ====> 481.fast_food.jpg
Completed Image ====> 482.fast_food.jpg
Completed Image ====> 483.fast_food.jpg
Completed Image ====> 484.fast_food.jpg
Completed Image ====> 485.fast_food.jpg
Completed Image ====> 486.fast_food.jpg
Completed Image ====> 487.fast_food.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 94 is all we got for this search filter!
Downloading images for:  pizza ...
Completed Image ====> 488.fast_food.jpg
Completed Image ====> 489.fast_food.jpg
Completed Image ====> 490.fast_food.jpg
Completed Image ====> 491.fast_food.jpg
Completed Image ====> 492.fast_food.jpg
Completed Image ====> 493.fast_food.jpg
Completed Image ====> 494.fast_food.jpg
Completed Image ====> 495.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 496.fast_food.jpg
Completed Image ====> 497.fast_food.jpeg
Completed Image ====> 498.fast_food.jpg
Completed Image ====> 499.fast_food.jpg
Error occurred ====> <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>	 ...trying next one...
Completed Image ====> 500.fast_food.jpg
Completed Image ====> 501.fast_food.jpg
Completed Image ====> 502.fast_food.jpg
Completed Image ====> 503.fast_food.jpg
Completed Image ====> 504.fast_food.jpg
Completed Image ====> 505.fast_food.jpg
Completed Image ====> 506.fast_food.jpg
Completed Image ====> 507.fast_food.jpg
Completed Image ====> 508.fast_food.png
Completed Image ====> 509.fast_food.jpg
Completed Image ====> 510.fast_food.jpg
Completed Image ====> 511.fast_food.jpg
Completed Image ====> 512.fast_food.jpg
Completed Image ====> 513.fast_food.png
Completed Image ====> 514.fast_food.jpg
Completed Image ====> 515.fast_food.jpg
Completed Image ====> 516.fast_food.jpg
Completed Image ====> 517.fast_food.jpg
Completed Image ====> 518.fast_food.jpg
Completed Image ====> 519.fast_food.jpg
Completed Image ====> 520.fast_food.jpg
Completed Image ====> 521.fast_food.png
Completed Image ====> 522.fast_food.jpg
Completed Image ====> 523.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 524.fast_food.jpg
Completed Image ====> 525.fast_food.png
Error occurred ====> <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>	 ...trying next one...
Completed Image ====> 526.fast_food.jpg
Completed Image ====> 527.fast_food.jpg
Completed Image ====> 528.fast_food.jpg
Completed Image ====> 529.fast_food.jpg
Completed Image ====> 530.fast_food.jpg
Completed Image ====> 531.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 532.fast_food.jpg
Completed Image ====> 533.fast_food.jpg
Completed Image ====> 534.fast_food.jpeg
Completed Image ====> 535.fast_food.jpg
Completed Image ====> 536.fast_food.jpg
Completed Image ====> 537.fast_food.jpg
Completed Image ====> 538.fast_food.jpg
Completed Image ====> 539.fast_food.png
Error occurred ====> The read operation timed out	 ...trying next one...
Completed Image ====> 540.fast_food.jpg
Completed Image ====> 541.fast_food.jpg
Completed Image ====> 542.fast_food.jpg
Completed Image ====> 543.fast_food.jpg
Completed Image ====> 544.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 545.fast_food.jpg
Completed Image ====> 546.fast_food.png
Completed Image ====> 547.fast_food.jpg
Completed Image ====> 548.fast_food.jpg
Completed Image ====> 549.fast_food.jpg
Completed Image ====> 550.fast_food.jpg
Completed Image ====> 551.fast_food.jpg
Completed Image ====> 552.fast_food.png
Completed Image ====> 553.fast_food.jpg
Completed Image ====> 554.fast_food.jpg
Completed Image ====> 555.fast_food.jpg
Completed Image ====> 556.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 557.fast_food.jpeg
Completed Image ====> 558.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 559.fast_food.jpg
Completed Image ====> 560.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 561.fast_food.jpg
Completed Image ====> 562.fast_food.jpg
Completed Image ====> 563.fast_food.jpg
Completed Image ====> 564.fast_food.jpg
Completed Image ====> 565.fast_food.jpg
Completed Image ====> 566.fast_food.jpg
Completed Image ====> 567.fast_food.jpg
Completed Image ====> 568.fast_food.jpg
Completed Image ====> 569.fast_food.jpg
Completed Image ====> 570.fast_food.jpeg
Completed Image ====> 571.fast_food.jpg
Completed Image ====> 572.fast_food.png
Completed Image ====> 573.fast_food.jpg
Completed Image ====> 574.fast_food.jpg
Completed Image ====> 575.fast_food.png


Unfortunately all 100 could not be downloaded because some images were not downloadable. 88 is all we got for this search filter!
Downloading images for:  french fries ...
Completed Image ====> 576.fast_food.jpg
Completed Image ====> 577.fast_food.jpg
Completed Image ====> 578.fast_food.jpg
Completed Image ====> 579.fast_food.jpg
Completed Image ====> 580.fast_food.jpg
Completed Image ====> 581.fast_food.jpg
Completed Image ====> 582.fast_food.jpg
Completed Image ====> 583.fast_food.jpeg
Completed Image ====> 584.fast_food.jpeg
Completed Image ====> 585.fast_food.jpg
Completed Image ====> 586.fast_food.jpg
Completed Image ====> 587.fast_food.jpg
Completed Image ====> 588.fast_food.jpeg
Completed Image ====> 589.fast_food.jpg
Completed Image ====> 590.fast_food.jpg
Completed Image ====> 591.fast_food.jpg
Completed Image ====> 592.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 593.fast_food.jpg
Completed Image ====> 594.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 595.fast_food.jpg
Completed Image ====> 596.fast_food.jpg
Completed Image ====> 597.fast_food.jpg
Completed Image ====> 598.fast_food.jpg
Completed Image ====> 599.fast_food.jpg
Completed Image ====> 600.fast_food.jpg
Completed Image ====> 601.fast_food.jpg
Completed Image ====> 602.fast_food.jpg
Completed Image ====> 603.fast_food.jpg
Completed Image ====> 604.fast_food.jpg
Completed Image ====> 605.fast_food.jpg
Completed Image ====> 606.fast_food.jpg
Completed Image ====> 607.fast_food.jpg
Completed Image ====> 608.fast_food.jpg
Completed Image ====> 609.fast_food.jpg
Completed Image ====> 610.fast_food.jpg
Completed Image ====> 611.fast_food.jpg
Completed Image ====> 612.fast_food.jpeg
Completed Image ====> 613.fast_food.jpg
Error occurred ====> HTTP Error 404: Not Found	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 614.fast_food.jpg
Completed Image ====> 615.fast_food.jpg
Completed Image ====> 616.fast_food.jpg
Completed Image ====> 617.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 618.fast_food.jpg
Completed Image ====> 619.fast_food.jpg
Completed Image ====> 620.fast_food.jpg
Completed Image ====> 621.fast_food.png
Completed Image ====> 622.fast_food.jpg
Completed Image ====> 623.fast_food.jpg
Completed Image ====> 624.fast_food.jpg
Completed Image ====> 625.fast_food.jpg
Completed Image ====> 626.fast_food.jpg
Completed Image ====> 627.fast_food.jpg
Completed Image ====> 628.fast_food.jpg
Completed Image ====> 629.fast_food.jpeg
Completed Image ====> 630.fast_food.jpg
Completed Image ====> 631.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 632.fast_food.jpg
Completed Image ====> 633.fast_food.jpg
Completed Image ====> 634.fast_food.jpg
Completed Image ====> 635.fast_food.jpg
Completed Image ====> 636.fast_food.jpg
Completed Image ====> 637.fast_food.jpg
Completed Image ====> 638.fast_food.jpg
Completed Image ====> 639.fast_food.jpg
Completed Image ====> 640.fast_food.jpg
Completed Image ====> 641.fast_food.jpeg
Completed Image ====> 642.fast_food.jpg
Completed Image ====> 643.fast_food.jpg
Completed Image ====> 644.fast_food.jpg
Completed Image ====> 645.fast_food.png
Completed Image ====> 646.fast_food.jpg
Completed Image ====> 647.fast_food.jpg
Completed Image ====> 648.fast_food.jpg
Completed Image ====> 649.fast_food.jpg
Completed Image ====> 650.fast_food.jpg
Completed Image ====> 651.fast_food.jpg
Completed Image ====> 652.fast_food.jpg
Completed Image ====> 653.fast_food.png
Completed Image ====> 654.fast_food.jpeg
Completed Image ====> 655.fast_food.jpg
Completed Image ====> 656.fast_food.jpg
Completed Image ====> 657.fast_food.jpg
Completed Image ====> 658.fast_food.jpg
Completed Image ====> 659.fast_food.jpg
Completed Image ====> 660.fast_food.jpg
Completed Image ====> 661.fast_food.jpg
Completed Image ====> 662.fast_food.jpg
Completed Image ====> 663.fast_food.jpg
Completed Image ====> 664.fast_food.jpg
Completed Image ====> 665.fast_food.jpg
Completed Image ====> 666.fast_food.jpg
Completed Image ====> 667.fast_food.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 92 is all we got for this search filter!
Downloading images for:  chicken popeyes ...
Completed Image ====> 668.fast_food.jpg
Completed Image ====> 669.fast_food.jpg
Completed Image ====> 670.fast_food.jpg
Completed Image ====> 671.fast_food.jpg
Completed Image ====> 672.fast_food.jpg
Completed Image ====> 673.fast_food.jpg
Completed Image ====> 674.fast_food.jpg
Completed Image ====> 675.fast_food.jpg
Completed Image ====> 676.fast_food.jpg
Completed Image ====> 677.fast_food.jpg
Completed Image ====> 678.fast_food.jpg
Completed Image ====> 679.fast_food.jpg
Completed Image ====> 680.fast_food.jpg
Completed Image ====> 681.fast_food.jpg
Completed Image ====> 682.fast_food.jpg
Completed Image ====> 683.fast_food.jpg
Completed Image ====> 684.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 685.fast_food.jpg
Completed Image ====> 686.fast_food.jpg
Completed Image ====> 687.fast_food.jpg
Completed Image ====> 688.fast_food.jpg
Completed Image ====> 689.fast_food.jpg
Completed Image ====> 690.fast_food.jpg
Completed Image ====> 691.fast_food.jpg
Completed Image ====> 692.fast_food.jpg
Completed Image ====> 693.fast_food.jpg
Completed Image ====> 694.fast_food.jpg
Completed Image ====> 695.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 696.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 697.fast_food.jpg
Completed Image ====> 698.fast_food.png
Completed Image ====> 699.fast_food.jpg
Completed Image ====> 700.fast_food.jpg
Completed Image ====> 701.fast_food.jpg
Completed Image ====> 702.fast_food.jpg
Completed Image ====> 703.fast_food.jpg
Completed Image ====> 704.fast_food.jpg
Completed Image ====> 705.fast_food.jpg
Completed Image ====> 706.fast_food.png
Completed Image ====> 707.fast_food.jpg
Completed Image ====> 708.fast_food.png
Completed Image ====> 709.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 710.fast_food.jpg
Completed Image ====> 711.fast_food.jpg
Completed Image ====> 712.fast_food.jpg
Completed Image ====> 713.fast_food.jpg
Error occurred ====> HTTP Error 403: Forbidden	 ...trying next one...
Completed Image ====> 714.fast_food.jpg
Completed Image ====> 715.fast_food.jpg
Completed Image ====> 716.fast_food.jpg
Completed Image ====> 717.fast_food.jpg
Completed Image ====> 718.fast_food.png
Completed Image ====> 719.fast_food.jpeg
Completed Image ====> 720.fast_food.jpg
Completed Image ====> 721.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 722.fast_food.jpg
Completed Image ====> 723.fast_food.jpg
Completed Image ====> 724.fast_food.jpg
Completed Image ====> 725.fast_food.jpg
Completed Image ====> 726.fast_food.jpg
Completed Image ====> 727.fast_food.jpeg
Completed Image ====> 728.fast_food.jpg
Completed Image ====> 729.fast_food.jpg
Completed Image ====> 730.fast_food.jpg
Completed Image ====> 731.fast_food.jpg
Completed Image ====> 732.fast_food.jpg
Completed Image ====> 733.fast_food.jpg
Completed Image ====> 734.fast_food.jpg
Completed Image ====> 735.fast_food.jpg
Completed Image ====> 736.fast_food.jpg
Completed Image ====> 737.fast_food.jpg
Completed Image ====> 738.fast_food.png
Completed Image ====> 739.fast_food.jpg
Completed Image ====> 740.fast_food.jpg
Completed Image ====> 741.fast_food.jpg
Completed Image ====> 742.fast_food.jpg
Completed Image ====> 743.fast_food.jpg
Completed Image ====> 744.fast_food.jpg
Completed Image ====> 745.fast_food.jpg
Completed Image ====> 746.fast_food.png
Completed Image ====> 747.fast_food.jpg
Completed Image ====> 748.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 749.fast_food.jpg
Completed Image ====> 750.fast_food.jpg
Completed Image ====> 751.fast_food.jpeg
Completed Image ====> 752.fast_food.jpg
Error occurred ====> The read operation timed out	 ...trying next one...
Completed Image ====> 753.fast_food.jpg
Completed Image ====> 754.fast_food.jpg
Completed Image ====> 755.fast_food.png
Completed Image ====> 756.fast_food.jpg
Completed Image ====> 757.fast_food.jpg
Completed Image ====> 758.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...


Unfortunately all 100 could not be downloaded because some images were not downloadable. 91 is all we got for this search filter!
Downloading images for:  burito ...
Completed Image ====> 759.fast_food.jpg
Completed Image ====> 760.fast_food.jpeg
Completed Image ====> 761.fast_food.jpg
Completed Image ====> 762.fast_food.jpg
Completed Image ====> 763.fast_food.jpg
Completed Image ====> 764.fast_food.jpg
Completed Image ====> 765.fast_food.jpg
Completed Image ====> 766.fast_food.jpeg
Completed Image ====> 767.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 768.fast_food.jpg
Completed Image ====> 769.fast_food.jpg
Completed Image ====> 770.fast_food.jpg
Completed Image ====> 771.fast_food.jpeg
Error occurred ====> <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>	 ...trying next one...
Completed Image ====> 772.fast_food.jpeg
Completed Image ====> 773.fast_food.jpg
Completed Image ====> 774.fast_food.jpg
Completed Image ====> 775.fast_food.jpg
Completed Image ====> 776.fast_food.jpg
Completed Image ====> 777.fast_food.jpg
Completed Image ====> 778.fast_food.jpg
Completed Image ====> 779.fast_food.jpg
Completed Image ====> 780.fast_food.jpg
Completed Image ====> 781.fast_food.jpg
Completed Image ====> 782.fast_food.jpg
Completed Image ====> 783.fast_food.jpeg
Completed Image ====> 784.fast_food.jpg
Completed Image ====> 785.fast_food.jpg
Completed Image ====> 786.fast_food.jpg
Completed Image ====> 787.fast_food.jpg
Completed Image ====> 788.fast_food.jpg
Completed Image ====> 789.fast_food.jpg
Completed Image ====> 790.fast_food.jpg
Completed Image ====> 791.fast_food.jpg
Completed Image ====> 792.fast_food.jpg
Completed Image ====> 793.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 794.fast_food.jpg
Completed Image ====> 795.fast_food.jpeg
Completed Image ====> 796.fast_food.jpg
Completed Image ====> 797.fast_food.jpg
Completed Image ====> 798.fast_food.jpg
Completed Image ====> 799.fast_food.jpg
Completed Image ====> 800.fast_food.jpg
Completed Image ====> 801.fast_food.jpg
Completed Image ====> 802.fast_food.jpg
Completed Image ====> 803.fast_food.jpeg
Completed Image ====> 804.fast_food.jpg
Completed Image ====> 805.fast_food.jpg
Completed Image ====> 806.fast_food.jpg
Completed Image ====> 807.fast_food.jpg
Completed Image ====> 808.fast_food.jpg
Completed Image ====> 809.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 810.fast_food.jpg
Completed Image ====> 811.fast_food.png
Completed Image ====> 812.fast_food.jpg
Completed Image ====> 813.fast_food.jpg
Completed Image ====> 814.fast_food.jpg
Completed Image ====> 815.fast_food.jpg
Completed Image ====> 816.fast_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 817.fast_food.jpg
Completed Image ====> 818.fast_food.jpg
Completed Image ====> 819.fast_food.jpg
Completed Image ====> 820.fast_food.jpg
Completed Image ====> 821.fast_food.jpg
Completed Image ====> 822.fast_food.jpg
Completed Image ====> 823.fast_food.jpg
Completed Image ====> 824.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 825.fast_food.jpg
Completed Image ====> 826.fast_food.jpg
Completed Image ====> 827.fast_food.jpg
Completed Image ====> 828.fast_food.jpg
Completed Image ====> 829.fast_food.jpeg
Completed Image ====> 830.fast_food.jpg
Completed Image ====> 831.fast_food.jpg
Completed Image ====> 832.fast_food.jpg
Completed Image ====> 833.fast_food.jpg
Completed Image ====> 834.fast_food.jpg
Completed Image ====> 835.fast_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 836.fast_food.png
Completed Image ====> 837.fast_food.jpg
Completed Image ====> 838.fast_food.jpeg
Completed Image ====> 839.fast_food.jpg
Completed Image ====> 840.fast_food.jpg
Completed Image ====> 841.fast_food.jpg
Completed Image ====> 842.fast_food.jpg
Completed Image ====> 843.fast_food.jpg
Completed Image ====> 844.fast_food.jpg
Completed Image ====> 845.fast_food.jpg
Completed Image ====> 846.fast_food.jpg
Completed Image ====> 847.fast_food.jpg
Completed Image ====> 848.fast_food.jpg
Completed Image ====> 849.fast_food.jpg
Completed Image ====> 850.fast_food.jpg
Completed Image ====> 851.fast_food.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 93 is all we got for this search filter!

Everything downloaded!
Total errors: 49
Total time taken: 604.961067199707 Seconds
In [6]:
scrap_images('healthy meal', 300, 'slow food')
Downloading images for: healthy meal ...
Getting you a lot of images. This may take a few moments...
Reached end of Page.
Completed Image ====> 1.slow_food.jpg
Completed Image ====> 2.slow_food.jpg
Completed Image ====> 3.slow_food.png
Completed Image ====> 4.slow_food.jpg
Completed Image ====> 5.slow_food.jpg
Completed Image ====> 6.slow_food.jpg
Completed Image ====> 7.slow_food.jpg
Completed Image ====> 8.slow_food.jpg
Completed Image ====> 9.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 10.slow_food.jpg
Completed Image ====> 11.slow_food.jpg
Completed Image ====> 12.slow_food.jpg
Completed Image ====> 13.slow_food.jpg
Completed Image ====> 14.slow_food.jpg
Completed Image ====> 15.slow_food.jpg
Completed Image ====> 16.slow_food.jpg
Completed Image ====> 17.slow_food.jpg
Completed Image ====> 18.slow_food.jpg
Completed Image ====> 19.slow_food.jpg
Completed Image ====> 20.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 21.slow_food.jpg
Completed Image ====> 22.slow_food.jpg
Completed Image ====> 23.slow_food.jpg
Completed Image ====> 24.slow_food.jpg
Completed Image ====> 25.slow_food.jpg
Completed Image ====> 26.slow_food.jpg
Completed Image ====> 27.slow_food.jpg
Completed Image ====> 28.slow_food.jpg
Completed Image ====> 29.slow_food.jpg
Completed Image ====> 30.slow_food.jpeg
Completed Image ====> 31.slow_food.jpg
Completed Image ====> 32.slow_food.jpg
Completed Image ====> 33.slow_food.jpg
Completed Image ====> 34.slow_food.jpg
Completed Image ====> 35.slow_food.jpg
Completed Image ====> 36.slow_food.jpg
Completed Image ====> 37.slow_food.jpg
Completed Image ====> 38.slow_food.jpg
Completed Image ====> 39.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 40.slow_food.jpg
Completed Image ====> 41.slow_food.jpg
Completed Image ====> 42.slow_food.jpg
Completed Image ====> 43.slow_food.jpg
Completed Image ====> 44.slow_food.jpg
Completed Image ====> 45.slow_food.jpg
Completed Image ====> 46.slow_food.jpg
Completed Image ====> 47.slow_food.jpeg
Completed Image ====> 48.slow_food.jpg
Completed Image ====> 49.slow_food.jpg
Completed Image ====> 50.slow_food.jpg
Completed Image ====> 51.slow_food.jpg
Completed Image ====> 52.slow_food.jpg
Completed Image ====> 53.slow_food.jpg
Completed Image ====> 54.slow_food.jpg
Completed Image ====> 55.slow_food.jpg
Error occurred ====> <urlopen error [Errno 11001] getaddrinfo failed>	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 56.slow_food.jpg
Completed Image ====> 57.slow_food.jpg
Completed Image ====> 58.slow_food.jpg
Completed Image ====> 59.slow_food.jpg
Completed Image ====> 60.slow_food.jpg
Completed Image ====> 61.slow_food.jpg
Completed Image ====> 62.slow_food.jpg
Completed Image ====> 63.slow_food.jpg
Completed Image ====> 64.slow_food.jpg
Completed Image ====> 65.slow_food.jpg
Completed Image ====> 66.slow_food.jpg
Completed Image ====> 67.slow_food.jpg
Completed Image ====> 68.slow_food.jpg
Completed Image ====> 69.slow_food.jpg
Completed Image ====> 70.slow_food.jpg
Completed Image ====> 71.slow_food.jpg
Completed Image ====> 72.slow_food.jpg
Error occurred ====> HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Moved Temporarily	 ...trying next one...
Completed Image ====> 73.slow_food.jpg
Completed Image ====> 74.slow_food.jpg
Completed Image ====> 75.slow_food.png
Completed Image ====> 76.slow_food.jpg
Completed Image ====> 77.slow_food.png
Completed Image ====> 78.slow_food.jpg
Completed Image ====> 79.slow_food.jpg
Completed Image ====> 80.slow_food.jpg
Completed Image ====> 81.slow_food.jpg
Completed Image ====> 82.slow_food.jpg
Completed Image ====> 83.slow_food.jpg
Completed Image ====> 84.slow_food.jpg
Completed Image ====> 85.slow_food.jpg
Completed Image ====> 86.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 87.slow_food.jpg
Completed Image ====> 88.slow_food.jpg
Completed Image ====> 89.slow_food.jpg
Completed Image ====> 90.slow_food.jpg
Completed Image ====> 91.slow_food.jpg
Completed Image ====> 92.slow_food.jpg
Completed Image ====> 93.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 94.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 95.slow_food.jpg
Completed Image ====> 96.slow_food.jpg
Completed Image ====> 97.slow_food.jpg
Completed Image ====> 98.slow_food.jpg
Completed Image ====> 99.slow_food.jpg
Completed Image ====> 100.slow_food.jpg
Completed Image ====> 101.slow_food.jpg
Completed Image ====> 102.slow_food.jpg
Completed Image ====> 103.slow_food.jpg
Completed Image ====> 104.slow_food.jpg
Completed Image ====> 105.slow_food.jpg
Completed Image ====> 106.slow_food.jpg
Completed Image ====> 107.slow_food.jpg
Completed Image ====> 108.slow_food.jpg
Completed Image ====> 109.slow_food.jpg
Completed Image ====> 110.slow_food.jpg
Completed Image ====> 111.slow_food.jpg
Completed Image ====> 112.slow_food.jpg
Completed Image ====> 113.slow_food.jpg
Completed Image ====> 114.slow_food.jpg
Completed Image ====> 115.slow_food.jpg
Completed Image ====> 116.slow_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 117.slow_food.jpg
Completed Image ====> 118.slow_food.jpg
Completed Image ====> 119.slow_food.jpg
Completed Image ====> 120.slow_food.jpg
Completed Image ====> 121.slow_food.jpg
Completed Image ====> 122.slow_food.jpg
Completed Image ====> 123.slow_food.jpg
Completed Image ====> 124.slow_food.jpg
Completed Image ====> 125.slow_food.jpg
Completed Image ====> 126.slow_food.jpg
Completed Image ====> 127.slow_food.jpg
Completed Image ====> 128.slow_food.jpeg
Completed Image ====> 129.slow_food.jpg
Completed Image ====> 130.slow_food.jpg
Completed Image ====> 131.slow_food.jpg
Completed Image ====> 132.slow_food.jpg
Completed Image ====> 133.slow_food.png
Completed Image ====> 134.slow_food.jpg
Completed Image ====> 135.slow_food.jpg
Completed Image ====> 136.slow_food.jpg
Completed Image ====> 137.slow_food.jpg
Completed Image ====> 138.slow_food.jpg
Completed Image ====> 139.slow_food.jpg
Completed Image ====> 140.slow_food.jpg
Completed Image ====> 141.slow_food.jpg
Completed Image ====> 142.slow_food.jpg
Completed Image ====> 143.slow_food.png
Completed Image ====> 144.slow_food.jpg
Completed Image ====> 145.slow_food.jpg
Error occurred ====> HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Moved Temporarily	 ...trying next one...
Completed Image ====> 146.slow_food.jpg
Error occurred ====> <urlopen error timed out>	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 147.slow_food.jpg
Completed Image ====> 148.slow_food.jpg
Completed Image ====> 149.slow_food.jpg
Completed Image ====> 150.slow_food.jpeg
Completed Image ====> 151.slow_food.jpg
Completed Image ====> 152.slow_food.jpg
Completed Image ====> 153.slow_food.jpeg
Completed Image ====> 154.slow_food.jpg
Completed Image ====> 155.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 156.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 157.slow_food.jpg
Completed Image ====> 158.slow_food.jpg
Completed Image ====> 159.slow_food.jpg
Completed Image ====> 160.slow_food.jpg
Completed Image ====> 161.slow_food.jpg
Completed Image ====> 162.slow_food.jpg
Completed Image ====> 163.slow_food.jpg
Completed Image ====> 164.slow_food.jpg
Completed Image ====> 165.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 166.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 167.slow_food.jpg
Completed Image ====> 168.slow_food.jpg
Completed Image ====> 169.slow_food.png
Completed Image ====> 170.slow_food.jpg
Completed Image ====> 171.slow_food.jpeg
Completed Image ====> 172.slow_food.jpg
Completed Image ====> 173.slow_food.jpg
Completed Image ====> 174.slow_food.jpg
Completed Image ====> 175.slow_food.jpg
Completed Image ====> 176.slow_food.jpg
Completed Image ====> 177.slow_food.jpg
Completed Image ====> 178.slow_food.jpg
Completed Image ====> 179.slow_food.jpg
Completed Image ====> 180.slow_food.jpg
Completed Image ====> 181.slow_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 182.slow_food.png
Completed Image ====> 183.slow_food.jpg
Completed Image ====> 184.slow_food.jpg
Completed Image ====> 185.slow_food.jpg
Completed Image ====> 186.slow_food.jpg
Completed Image ====> 187.slow_food.jpg
Completed Image ====> 188.slow_food.jpg
Error occurred ====> <urlopen error [Errno 11001] getaddrinfo failed>	 ...trying next one...
Completed Image ====> 189.slow_food.jpg
Completed Image ====> 190.slow_food.jpg
Completed Image ====> 191.slow_food.png
Completed Image ====> 192.slow_food.jpg
Completed Image ====> 193.slow_food.jpg
Completed Image ====> 194.slow_food.jpg
Completed Image ====> 195.slow_food.jpg
Completed Image ====> 196.slow_food.jpg
Completed Image ====> 197.slow_food.jpg
Completed Image ====> 198.slow_food.jpg
Completed Image ====> 199.slow_food.jpg
Completed Image ====> 200.slow_food.jpg
Completed Image ====> 201.slow_food.png
Completed Image ====> 202.slow_food.jpg
Completed Image ====> 203.slow_food.jpg
Completed Image ====> 204.slow_food.jpg
Completed Image ====> 205.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 206.slow_food.jpg
Completed Image ====> 207.slow_food.jpg
Completed Image ====> 208.slow_food.jpeg
Completed Image ====> 209.slow_food.jpg
Completed Image ====> 210.slow_food.jpg
Completed Image ====> 211.slow_food.jpg
Completed Image ====> 212.slow_food.jpg
Completed Image ====> 213.slow_food.jpg
Completed Image ====> 214.slow_food.jpg
Completed Image ====> 215.slow_food.jpg
Completed Image ====> 216.slow_food.png
Completed Image ====> 217.slow_food.jpg
Completed Image ====> 218.slow_food.jpg
Completed Image ====> 219.slow_food.jpg
Completed Image ====> 220.slow_food.jpg
Completed Image ====> 221.slow_food.jpg
Completed Image ====> 222.slow_food.jpg
Completed Image ====> 223.slow_food.jpg
Completed Image ====> 224.slow_food.jpg
Completed Image ====> 225.slow_food.jpg
Completed Image ====> 226.slow_food.png
Completed Image ====> 227.slow_food.jpeg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 228.slow_food.jpg
Completed Image ====> 229.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 230.slow_food.jpg
Completed Image ====> 231.slow_food.jpg
Completed Image ====> 232.slow_food.jpg
Completed Image ====> 233.slow_food.jpg
Completed Image ====> 234.slow_food.jpg
Completed Image ====> 235.slow_food.jpg
Completed Image ====> 236.slow_food.jpg
Completed Image ====> 237.slow_food.png
Completed Image ====> 238.slow_food.jpg
Completed Image ====> 239.slow_food.jpg
Completed Image ====> 240.slow_food.jpg
Completed Image ====> 241.slow_food.jpg
Completed Image ====> 242.slow_food.jpg
Completed Image ====> 243.slow_food.jpg
Completed Image ====> 244.slow_food.jpg
Completed Image ====> 245.slow_food.jpg
Completed Image ====> 246.slow_food.jpg
Completed Image ====> 247.slow_food.jpg
Completed Image ====> 248.slow_food.jpg
Completed Image ====> 249.slow_food.jpeg
Completed Image ====> 250.slow_food.jpg
Completed Image ====> 251.slow_food.jpg
Completed Image ====> 252.slow_food.jpg
Completed Image ====> 253.slow_food.jpg
Completed Image ====> 254.slow_food.jpg
Completed Image ====> 255.slow_food.jpg
Completed Image ====> 256.slow_food.jpg
Completed Image ====> 257.slow_food.jpeg
Error occurred ====> HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Moved Temporarily	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 258.slow_food.jpg
Completed Image ====> 259.slow_food.jpg
Completed Image ====> 260.slow_food.jpg
Completed Image ====> 261.slow_food.jpeg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 262.slow_food.jpg
Completed Image ====> 263.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 264.slow_food.jpg
Completed Image ====> 265.slow_food.jpg
Completed Image ====> 266.slow_food.jpg
Completed Image ====> 267.slow_food.png
Completed Image ====> 268.slow_food.jpg
Completed Image ====> 269.slow_food.jpg
Completed Image ====> 270.slow_food.jpg
Completed Image ====> 271.slow_food.jpg
Completed Image ====> 272.slow_food.jpg
Completed Image ====> 273.slow_food.jpg
Completed Image ====> 274.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 275.slow_food.png
Completed Image ====> 276.slow_food.jpg
Completed Image ====> 277.slow_food.jpg
Completed Image ====> 278.slow_food.jpg
Completed Image ====> 279.slow_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 280.slow_food.jpg
Completed Image ====> 281.slow_food.jpg
Completed Image ====> 282.slow_food.jpg
Completed Image ====> 283.slow_food.jpg
Completed Image ====> 284.slow_food.jpg
Completed Image ====> 285.slow_food.jpg
Completed Image ====> 286.slow_food.jpg
Completed Image ====> 287.slow_food.jpg
Completed Image ====> 288.slow_food.jpg
Completed Image ====> 289.slow_food.png
Completed Image ====> 290.slow_food.jpg
Completed Image ====> 291.slow_food.jpg
Completed Image ====> 292.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> <urlopen error [Errno 11001] getaddrinfo failed>	 ...trying next one...
Completed Image ====> 293.slow_food.jpg
Completed Image ====> 294.slow_food.jpg
Completed Image ====> 295.slow_food.jpg
Completed Image ====> 296.slow_food.jpg
Completed Image ====> 297.slow_food.jpg
Completed Image ====> 298.slow_food.jpg
Completed Image ====> 299.slow_food.png
Completed Image ====> 300.slow_food.jpg

Everything downloaded!
Total errors: 31
Total time taken: 586.3159148693085 Seconds
In [7]:
scrap_images('vegetables, fruit, fit meal, walnuts dinner, fish dinner, green beans dinner', 100, 'slow food')
Downloading images for: vegetables ...
Completed Image ====> 301.slow_food.jpg
Completed Image ====> 302.slow_food.jpg
Completed Image ====> 303.slow_food.jpg
Completed Image ====> 304.slow_food.jpg
Completed Image ====> 305.slow_food.png
Completed Image ====> 306.slow_food.jpg
Completed Image ====> 307.slow_food.jpg
Completed Image ====> 308.slow_food.jpg
Completed Image ====> 309.slow_food.jpg
Completed Image ====> 310.slow_food.jpg
Completed Image ====> 311.slow_food.jpg
Completed Image ====> 312.slow_food.jpeg
Completed Image ====> 313.slow_food.jpg
Completed Image ====> 314.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> <urlopen error timed out>	 ...trying next one...
Completed Image ====> 315.slow_food.jpg
Completed Image ====> 316.slow_food.jpg
Completed Image ====> 317.slow_food.jpg
Completed Image ====> 318.slow_food.jpg
Completed Image ====> 319.slow_food.jpg
Completed Image ====> 320.slow_food.png
Completed Image ====> 321.slow_food.jpg
Completed Image ====> 322.slow_food.jpg
Completed Image ====> 323.slow_food.jpg
Completed Image ====> 324.slow_food.jpg
Completed Image ====> 325.slow_food.png
Completed Image ====> 326.slow_food.jpg
Completed Image ====> 327.slow_food.jpg
Completed Image ====> 328.slow_food.jpg
Completed Image ====> 329.slow_food.jpg
Completed Image ====> 330.slow_food.jpg
Completed Image ====> 331.slow_food.jpg
Completed Image ====> 332.slow_food.jpg
Completed Image ====> 333.slow_food.jpg
Completed Image ====> 334.slow_food.jpg
Completed Image ====> 335.slow_food.jpg
Completed Image ====> 336.slow_food.jpg
Completed Image ====> 337.slow_food.jpg
Completed Image ====> 338.slow_food.jpg
Completed Image ====> 339.slow_food.jpg
Completed Image ====> 340.slow_food.jpg
Completed Image ====> 341.slow_food.jpg
Completed Image ====> 342.slow_food.jpg
Completed Image ====> 343.slow_food.jpg
Completed Image ====> 344.slow_food.jpg
Completed Image ====> 345.slow_food.jpg
Completed Image ====> 346.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 347.slow_food.jpg
Completed Image ====> 348.slow_food.jpg
Completed Image ====> 349.slow_food.jpg
Completed Image ====> 350.slow_food.jpg
Completed Image ====> 351.slow_food.jpg
Completed Image ====> 352.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 353.slow_food.jpg
Completed Image ====> 354.slow_food.jpg
Completed Image ====> 355.slow_food.jpg
Completed Image ====> 356.slow_food.jpg
Completed Image ====> 357.slow_food.jpg
Completed Image ====> 358.slow_food.jpg
Completed Image ====> 359.slow_food.jpg
Completed Image ====> 360.slow_food.jpg
Completed Image ====> 361.slow_food.jpg
Completed Image ====> 362.slow_food.jpg
Completed Image ====> 363.slow_food.jpg
Completed Image ====> 364.slow_food.jpg
Completed Image ====> 365.slow_food.jpg
Completed Image ====> 366.slow_food.jpg
Completed Image ====> 367.slow_food.jpg
Completed Image ====> 368.slow_food.jpg
Completed Image ====> 369.slow_food.jpg
Completed Image ====> 370.slow_food.jpg
Completed Image ====> 371.slow_food.jpg
Completed Image ====> 372.slow_food.jpg
Completed Image ====> 373.slow_food.jpg
Completed Image ====> 374.slow_food.jpg
Completed Image ====> 375.slow_food.jpg
Completed Image ====> 376.slow_food.jpg
Completed Image ====> 377.slow_food.jpg
Completed Image ====> 378.slow_food.jpg
Completed Image ====> 379.slow_food.png
Completed Image ====> 380.slow_food.jpg
Completed Image ====> 381.slow_food.jpg
Completed Image ====> 382.slow_food.jpg
Completed Image ====> 383.slow_food.jpg
Completed Image ====> 384.slow_food.jpeg
Completed Image ====> 385.slow_food.jpg
Completed Image ====> 386.slow_food.jpg
Completed Image ====> 387.slow_food.jpg
Completed Image ====> 388.slow_food.jpg
Completed Image ====> 389.slow_food.jpg
Completed Image ====> 390.slow_food.jpg
Completed Image ====> 391.slow_food.jpg
Completed Image ====> 392.slow_food.jpg
Completed Image ====> 393.slow_food.jpg
Completed Image ====> 394.slow_food.jpg
Completed Image ====> 395.slow_food.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 95 is all we got for this search filter!
Downloading images for:  fruit ...
Completed Image ====> 396.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 397.slow_food.jpg
Completed Image ====> 398.slow_food.jpg
Completed Image ====> 399.slow_food.jpg
Completed Image ====> 400.slow_food.png
Completed Image ====> 401.slow_food.jpg
Completed Image ====> 402.slow_food.png
Completed Image ====> 403.slow_food.jpg
Completed Image ====> 404.slow_food.jpg
Completed Image ====> 405.slow_food.jpg
Completed Image ====> 406.slow_food.jpg
Completed Image ====> 407.slow_food.jpg
Completed Image ====> 408.slow_food.jpg
Completed Image ====> 409.slow_food.jpg
Completed Image ====> 410.slow_food.jpg
Completed Image ====> 411.slow_food.jpg
Completed Image ====> 412.slow_food.jpg
Completed Image ====> 413.slow_food.jpg
Completed Image ====> 414.slow_food.png
Completed Image ====> 415.slow_food.jpg
Completed Image ====> 416.slow_food.jpg
Completed Image ====> 417.slow_food.jpg
Completed Image ====> 418.slow_food.png
Completed Image ====> 419.slow_food.jpg
Completed Image ====> 420.slow_food.jpg
Completed Image ====> 421.slow_food.jpg
Completed Image ====> 422.slow_food.jpg
Completed Image ====> 423.slow_food.jpg
Completed Image ====> 424.slow_food.jpg
Completed Image ====> 425.slow_food.jpg
Completed Image ====> 426.slow_food.jpg
Completed Image ====> 427.slow_food.png
Completed Image ====> 428.slow_food.jpg
Completed Image ====> 429.slow_food.png
Completed Image ====> 430.slow_food.jpg
Completed Image ====> 431.slow_food.jpg
Completed Image ====> 432.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 433.slow_food.jpg
Completed Image ====> 434.slow_food.jpg
Completed Image ====> 435.slow_food.jpg
Completed Image ====> 436.slow_food.jpg
Completed Image ====> 437.slow_food.jpg
Completed Image ====> 438.slow_food.png
Completed Image ====> 439.slow_food.jpg
Completed Image ====> 440.slow_food.jpg
Completed Image ====> 441.slow_food.jpg
Completed Image ====> 442.slow_food.jpg
Completed Image ====> 443.slow_food.jpg
Completed Image ====> 444.slow_food.jpg
Completed Image ====> 445.slow_food.jpg
Completed Image ====> 446.slow_food.jpg
Completed Image ====> 447.slow_food.jpg
Completed Image ====> 448.slow_food.jpg
Completed Image ====> 449.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 450.slow_food.png
Completed Image ====> 451.slow_food.jpg
Completed Image ====> 452.slow_food.jpg
Completed Image ====> 453.slow_food.jpg
Completed Image ====> 454.slow_food.jpeg
Completed Image ====> 455.slow_food.jpg
Completed Image ====> 456.slow_food.jpg
Completed Image ====> 457.slow_food.jpg
Completed Image ====> 458.slow_food.jpg
Completed Image ====> 459.slow_food.jpg
Completed Image ====> 460.slow_food.jpg
Completed Image ====> 461.slow_food.jpg
Completed Image ====> 462.slow_food.jpg
Completed Image ====> 463.slow_food.jpg
Completed Image ====> 464.slow_food.jpg
Completed Image ====> 465.slow_food.jpg
Completed Image ====> 466.slow_food.jpg
Completed Image ====> 467.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 468.slow_food.jpg
Completed Image ====> 469.slow_food.jpg
Completed Image ====> 470.slow_food.jpg
Completed Image ====> 471.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 472.slow_food.jpg
Completed Image ====> 473.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 474.slow_food.jpg
Error occurred ====> <urlopen error timed out>	 ...trying next one...
Completed Image ====> 475.slow_food.jpg
Completed Image ====> 476.slow_food.png
Completed Image ====> 477.slow_food.jpeg
Completed Image ====> 478.slow_food.jpg
Completed Image ====> 479.slow_food.jpg
Completed Image ====> 480.slow_food.jpeg
Completed Image ====> 481.slow_food.jpg
Completed Image ====> 482.slow_food.jpg
Completed Image ====> 483.slow_food.jpg
Completed Image ====> 484.slow_food.jpg
Completed Image ====> 485.slow_food.jpg
Completed Image ====> 486.slow_food.jpg
Completed Image ====> 487.slow_food.jpg
Completed Image ====> 488.slow_food.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 93 is all we got for this search filter!
Downloading images for:  fit meal ...
Completed Image ====> 489.slow_food.jpg
Completed Image ====> 490.slow_food.jpg
Completed Image ====> 491.slow_food.jpg
Completed Image ====> 492.slow_food.jpg
Completed Image ====> 493.slow_food.jpg
Completed Image ====> 494.slow_food.jpg
Completed Image ====> 495.slow_food.jpg
Completed Image ====> 496.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Error occurred ====> HTTP Error 403: Forbidden	 ...trying next one...
Completed Image ====> 497.slow_food.jpg
Completed Image ====> 498.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 499.slow_food.jpg
Completed Image ====> 500.slow_food.jpg
Completed Image ====> 501.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 502.slow_food.jpg
Completed Image ====> 503.slow_food.jpg
Completed Image ====> 504.slow_food.jpg
Completed Image ====> 505.slow_food.jpg
Completed Image ====> 506.slow_food.jpeg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 507.slow_food.jpg
Completed Image ====> 508.slow_food.jpg
Completed Image ====> 509.slow_food.jpg
Completed Image ====> 510.slow_food.png
Completed Image ====> 511.slow_food.png
Completed Image ====> 512.slow_food.jpg
Completed Image ====> 513.slow_food.jpg
Completed Image ====> 514.slow_food.jpg
Completed Image ====> 515.slow_food.jpg
Completed Image ====> 516.slow_food.jpg
Completed Image ====> 517.slow_food.png
Completed Image ====> 518.slow_food.jpg
Completed Image ====> 519.slow_food.jpg
Completed Image ====> 520.slow_food.jpg
Completed Image ====> 521.slow_food.jpg
Completed Image ====> 522.slow_food.jpg
Completed Image ====> 523.slow_food.jpg
Completed Image ====> 524.slow_food.png
Error occurred ====> HTTP Error 403: Forbidden	 ...trying next one...
Completed Image ====> 525.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 526.slow_food.jpg
Completed Image ====> 527.slow_food.jpg
Completed Image ====> 528.slow_food.jpg
Completed Image ====> 529.slow_food.jpg
Completed Image ====> 530.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 531.slow_food.jpg
Completed Image ====> 532.slow_food.jpg
Completed Image ====> 533.slow_food.jpg
Completed Image ====> 534.slow_food.jpg
Completed Image ====> 535.slow_food.jpg
Completed Image ====> 536.slow_food.jpg
Completed Image ====> 537.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 538.slow_food.jpg
Completed Image ====> 539.slow_food.jpg
Completed Image ====> 540.slow_food.jpg
Completed Image ====> 541.slow_food.jpg
Completed Image ====> 542.slow_food.jpg
Completed Image ====> 543.slow_food.jpg
Completed Image ====> 544.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 545.slow_food.png
Completed Image ====> 546.slow_food.jpg
Completed Image ====> 547.slow_food.jpg
Completed Image ====> 548.slow_food.jpg
Completed Image ====> 549.slow_food.jpg
Completed Image ====> 550.slow_food.jpg
Completed Image ====> 551.slow_food.jpeg
Completed Image ====> 552.slow_food.jpg
Completed Image ====> 553.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 554.slow_food.jpg
Completed Image ====> 555.slow_food.jpg
Completed Image ====> 556.slow_food.png
Completed Image ====> 557.slow_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 558.slow_food.jpg
Completed Image ====> 559.slow_food.jpg
Completed Image ====> 560.slow_food.jpg
Completed Image ====> 561.slow_food.png
Completed Image ====> 562.slow_food.jpg
Completed Image ====> 563.slow_food.jpg
Completed Image ====> 564.slow_food.jpg
Completed Image ====> 565.slow_food.jpg
Completed Image ====> 566.slow_food.png
Completed Image ====> 567.slow_food.jpg
Completed Image ====> 568.slow_food.jpg
Completed Image ====> 569.slow_food.jpg
Completed Image ====> 570.slow_food.jpg
Completed Image ====> 571.slow_food.png
Completed Image ====> 572.slow_food.jpg
Completed Image ====> 573.slow_food.jpg
Completed Image ====> 574.slow_food.jpg
Completed Image ====> 575.slow_food.png
Completed Image ====> 576.slow_food.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 88 is all we got for this search filter!
Downloading images for:  walnuts dinner ...
Completed Image ====> 577.slow_food.jpg
Completed Image ====> 578.slow_food.jpg
Completed Image ====> 579.slow_food.jpg
Completed Image ====> 580.slow_food.jpg
Completed Image ====> 581.slow_food.jpg
Completed Image ====> 582.slow_food.jpg
Completed Image ====> 583.slow_food.jpg
Completed Image ====> 584.slow_food.jpg
Completed Image ====> 585.slow_food.jpg
Completed Image ====> 586.slow_food.jpg
Completed Image ====> 587.slow_food.jpg
Completed Image ====> 588.slow_food.jpg
Completed Image ====> 589.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 590.slow_food.jpg
Completed Image ====> 591.slow_food.jpg
Completed Image ====> 592.slow_food.jpg
Completed Image ====> 593.slow_food.jpg
Completed Image ====> 594.slow_food.jpg
Completed Image ====> 595.slow_food.jpg
Completed Image ====> 596.slow_food.jpg
Completed Image ====> 597.slow_food.jpg
Completed Image ====> 598.slow_food.jpg
Completed Image ====> 599.slow_food.jpg
Completed Image ====> 600.slow_food.jpg
Completed Image ====> 601.slow_food.jpg
Completed Image ====> 602.slow_food.jpg
Completed Image ====> 603.slow_food.jpg
Completed Image ====> 604.slow_food.jpg
Completed Image ====> 605.slow_food.jpg
Completed Image ====> 606.slow_food.jpg
Completed Image ====> 607.slow_food.jpg
Completed Image ====> 608.slow_food.jpg
Completed Image ====> 609.slow_food.jpg
Completed Image ====> 610.slow_food.jpg
Completed Image ====> 611.slow_food.jpg
Completed Image ====> 612.slow_food.jpg
Completed Image ====> 613.slow_food.jpg
Completed Image ====> 614.slow_food.jpg
Completed Image ====> 615.slow_food.jpg
Completed Image ====> 616.slow_food.jpg
Completed Image ====> 617.slow_food.jpg
Completed Image ====> 618.slow_food.jpg
Completed Image ====> 619.slow_food.jpg
Completed Image ====> 620.slow_food.jpg
Completed Image ====> 621.slow_food.jpg
Completed Image ====> 622.slow_food.jpg
Completed Image ====> 623.slow_food.jpg
Completed Image ====> 624.slow_food.jpg
Completed Image ====> 625.slow_food.jpg
Completed Image ====> 626.slow_food.jpg
Completed Image ====> 627.slow_food.jpg
Completed Image ====> 628.slow_food.jpg
Completed Image ====> 629.slow_food.jpg
Completed Image ====> 630.slow_food.jpg
Completed Image ====> 631.slow_food.jpg
Completed Image ====> 632.slow_food.jpg
Completed Image ====> 633.slow_food.jpeg
Completed Image ====> 634.slow_food.jpg
Error occurred ====> <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>	 ...trying next one...
Completed Image ====> 635.slow_food.png
Completed Image ====> 636.slow_food.jpg
Completed Image ====> 637.slow_food.jpg
Completed Image ====> 638.slow_food.jpg
Completed Image ====> 639.slow_food.jpg
Completed Image ====> 640.slow_food.jpg
Completed Image ====> 641.slow_food.jpg
Completed Image ====> 642.slow_food.jpg
Completed Image ====> 643.slow_food.jpg
Completed Image ====> 644.slow_food.jpg
Completed Image ====> 645.slow_food.jpg
Completed Image ====> 646.slow_food.jpg
Completed Image ====> 647.slow_food.jpg
Completed Image ====> 648.slow_food.jpg
Completed Image ====> 649.slow_food.jpg
Completed Image ====> 650.slow_food.jpg
Completed Image ====> 651.slow_food.jpg
Completed Image ====> 652.slow_food.jpg
Completed Image ====> 653.slow_food.jpg
Completed Image ====> 654.slow_food.jpg
Completed Image ====> 655.slow_food.jpg
Completed Image ====> 656.slow_food.jpg
Completed Image ====> 657.slow_food.jpg
Completed Image ====> 658.slow_food.jpg
Completed Image ====> 659.slow_food.jpg
Completed Image ====> 660.slow_food.jpg
Completed Image ====> 661.slow_food.jpg
Completed Image ====> 662.slow_food.jpg
Completed Image ====> 663.slow_food.jpg
Completed Image ====> 664.slow_food.jpg
Completed Image ====> 665.slow_food.jpg
Completed Image ====> 666.slow_food.jpg
Completed Image ====> 667.slow_food.jpg
Completed Image ====> 668.slow_food.jpg
Completed Image ====> 669.slow_food.jpg
Completed Image ====> 670.slow_food.jpg
Completed Image ====> 671.slow_food.jpeg
Completed Image ====> 672.slow_food.jpg
Completed Image ====> 673.slow_food.png
Completed Image ====> 674.slow_food.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 98 is all we got for this search filter!
Downloading images for:  fish dinner ...
Completed Image ====> 675.slow_food.jpg
Completed Image ====> 676.slow_food.jpg
Completed Image ====> 677.slow_food.jpg
Completed Image ====> 678.slow_food.jpg
Completed Image ====> 679.slow_food.jpg
Completed Image ====> 680.slow_food.jpg
Completed Image ====> 681.slow_food.jpg
Completed Image ====> 682.slow_food.jpg
Completed Image ====> 683.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 684.slow_food.jpg
Completed Image ====> 685.slow_food.jpg
Completed Image ====> 686.slow_food.jpg
Completed Image ====> 687.slow_food.jpg
Completed Image ====> 688.slow_food.jpeg
Completed Image ====> 689.slow_food.jpg
Completed Image ====> 690.slow_food.jpg
Completed Image ====> 691.slow_food.jpg
Completed Image ====> 692.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 693.slow_food.jpg
Completed Image ====> 694.slow_food.jpg
Completed Image ====> 695.slow_food.jpg
Completed Image ====> 696.slow_food.jpg
Completed Image ====> 697.slow_food.jpg
Completed Image ====> 698.slow_food.jpg
Completed Image ====> 699.slow_food.png
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 700.slow_food.jpg
Completed Image ====> 701.slow_food.jpg
Completed Image ====> 702.slow_food.jpg
Completed Image ====> 703.slow_food.jpg
Completed Image ====> 704.slow_food.jpg
Completed Image ====> 705.slow_food.jpg
Completed Image ====> 706.slow_food.jpg
Completed Image ====> 707.slow_food.jpg
Completed Image ====> 708.slow_food.jpg
Completed Image ====> 709.slow_food.jpg
Completed Image ====> 710.slow_food.jpeg
Completed Image ====> 711.slow_food.jpg
Completed Image ====> 712.slow_food.jpg
Completed Image ====> 713.slow_food.jpg
Completed Image ====> 714.slow_food.jpg
Error occurred ====> <urlopen error timed out>	 ...trying next one...
Completed Image ====> 715.slow_food.jpg
Completed Image ====> 716.slow_food.jpg
Completed Image ====> 717.slow_food.jpg
Completed Image ====> 718.slow_food.jpg
Completed Image ====> 719.slow_food.jpg
Completed Image ====> 720.slow_food.jpg
Completed Image ====> 721.slow_food.jpg
Completed Image ====> 722.slow_food.jpg
Completed Image ====> 723.slow_food.jpg
Completed Image ====> 724.slow_food.jpg
Completed Image ====> 725.slow_food.jpg
Completed Image ====> 726.slow_food.jpg
Completed Image ====> 727.slow_food.jpg
Completed Image ====> 728.slow_food.jpg
Completed Image ====> 729.slow_food.jpg
Completed Image ====> 730.slow_food.jpg
Completed Image ====> 731.slow_food.jpg
Completed Image ====> 732.slow_food.jpg
Completed Image ====> 733.slow_food.jpg
Completed Image ====> 734.slow_food.jpg
Completed Image ====> 735.slow_food.jpg
Completed Image ====> 736.slow_food.png
Completed Image ====> 737.slow_food.jpg
Completed Image ====> 738.slow_food.jpg
Completed Image ====> 739.slow_food.jpg
Completed Image ====> 740.slow_food.jpg
Completed Image ====> 741.slow_food.jpg
Completed Image ====> 742.slow_food.jpg
Completed Image ====> 743.slow_food.jpg
Completed Image ====> 744.slow_food.png
Completed Image ====> 745.slow_food.jpg
Completed Image ====> 746.slow_food.jpg
Completed Image ====> 747.slow_food.jpg
Completed Image ====> 748.slow_food.jpg
Completed Image ====> 749.slow_food.jpg
Completed Image ====> 750.slow_food.jpg
Completed Image ====> 751.slow_food.jpg
Completed Image ====> 752.slow_food.jpg
Completed Image ====> 753.slow_food.jpg
Completed Image ====> 754.slow_food.jpg
Completed Image ====> 755.slow_food.jpg
Completed Image ====> 756.slow_food.jpg
Completed Image ====> 757.slow_food.jpg
Error occurred ====> HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Moved Temporarily	 ...trying next one...
Completed Image ====> 758.slow_food.jpg
Completed Image ====> 759.slow_food.jpeg
Completed Image ====> 760.slow_food.jpg
Completed Image ====> 761.slow_food.jpeg
Completed Image ====> 762.slow_food.jpg
Completed Image ====> 763.slow_food.jpg
Error occurred ====> Invalid or missing image format.	 ...trying next one...
Completed Image ====> 764.slow_food.jpg
Completed Image ====> 765.slow_food.jpg
Completed Image ====> 766.slow_food.jpg
Completed Image ====> 767.slow_food.jpg
Completed Image ====> 768.slow_food.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 94 is all we got for this search filter!
Downloading images for:  green beans dinner ...
Completed Image ====> 769.slow_food.jpg
Completed Image ====> 770.slow_food.jpg
Completed Image ====> 771.slow_food.jpg
Completed Image ====> 772.slow_food.jpg
Completed Image ====> 773.slow_food.jpg
Completed Image ====> 774.slow_food.jpg
Completed Image ====> 775.slow_food.jpg
Completed Image ====> 776.slow_food.jpg
Completed Image ====> 777.slow_food.jpg
Completed Image ====> 778.slow_food.jpg
Completed Image ====> 779.slow_food.jpg
Completed Image ====> 780.slow_food.jpg
Completed Image ====> 781.slow_food.jpg
Completed Image ====> 782.slow_food.jpg
Completed Image ====> 783.slow_food.jpg
Completed Image ====> 784.slow_food.jpg
Completed Image ====> 785.slow_food.jpg
Completed Image ====> 786.slow_food.jpg
Completed Image ====> 787.slow_food.jpg
Completed Image ====> 788.slow_food.jpg
Completed Image ====> 789.slow_food.jpg
Completed Image ====> 790.slow_food.jpg
Completed Image ====> 791.slow_food.jpg
Completed Image ====> 792.slow_food.jpg
Completed Image ====> 793.slow_food.jpg
Completed Image ====> 794.slow_food.jpg
Completed Image ====> 795.slow_food.jpg
Completed Image ====> 796.slow_food.jpg
Completed Image ====> 797.slow_food.jpeg
Completed Image ====> 798.slow_food.jpg
Completed Image ====> 799.slow_food.jpg
Completed Image ====> 800.slow_food.jpg
Completed Image ====> 801.slow_food.jpg
Completed Image ====> 802.slow_food.jpg
Completed Image ====> 803.slow_food.jpg
Completed Image ====> 804.slow_food.jpg
Completed Image ====> 805.slow_food.jpg
Completed Image ====> 806.slow_food.jpg
Completed Image ====> 807.slow_food.jpg
Completed Image ====> 808.slow_food.jpg
Completed Image ====> 809.slow_food.jpg
Completed Image ====> 810.slow_food.jpg
Completed Image ====> 811.slow_food.jpg
Completed Image ====> 812.slow_food.jpg
Completed Image ====> 813.slow_food.jpg
Completed Image ====> 814.slow_food.jpg
Completed Image ====> 815.slow_food.jpg
Completed Image ====> 816.slow_food.jpg
Completed Image ====> 817.slow_food.jpg
Completed Image ====> 818.slow_food.jpg
Completed Image ====> 819.slow_food.jpg
Completed Image ====> 820.slow_food.jpg
Completed Image ====> 821.slow_food.jpg
Completed Image ====> 822.slow_food.jpg
Completed Image ====> 823.slow_food.jpg
Completed Image ====> 824.slow_food.jpg
Completed Image ====> 825.slow_food.jpg
Completed Image ====> 826.slow_food.jpg
Completed Image ====> 827.slow_food.jpg
Completed Image ====> 828.slow_food.jpg
Completed Image ====> 829.slow_food.jpg
Completed Image ====> 830.slow_food.jpg
Completed Image ====> 831.slow_food.jpg
Completed Image ====> 832.slow_food.jpg
Completed Image ====> 833.slow_food.jpg
Completed Image ====> 834.slow_food.jpg
Completed Image ====> 835.slow_food.jpg
Completed Image ====> 836.slow_food.jpg
Completed Image ====> 837.slow_food.jpg
Completed Image ====> 838.slow_food.jpg
Completed Image ====> 839.slow_food.jpg
Completed Image ====> 840.slow_food.jpg
Completed Image ====> 841.slow_food.jpg
Completed Image ====> 842.slow_food.jpg
Completed Image ====> 843.slow_food.jpg
Completed Image ====> 844.slow_food.jpg
Completed Image ====> 845.slow_food.jpg
Completed Image ====> 846.slow_food.jpg
Completed Image ====> 847.slow_food.jpg
Completed Image ====> 848.slow_food.jpg
Completed Image ====> 849.slow_food.jpg
Completed Image ====> 850.slow_food.jpg
Completed Image ====> 851.slow_food.png
Completed Image ====> 852.slow_food.jpg
Completed Image ====> 853.slow_food.jpg
Completed Image ====> 854.slow_food.jpg
Completed Image ====> 855.slow_food.png
Completed Image ====> 856.slow_food.jpg
Completed Image ====> 857.slow_food.jpg
Completed Image ====> 858.slow_food.jpg
Completed Image ====> 859.slow_food.jpg
Completed Image ====> 860.slow_food.jpg
Completed Image ====> 861.slow_food.jpg
Completed Image ====> 862.slow_food.jpg
Completed Image ====> 863.slow_food.jpg
Completed Image ====> 864.slow_food.jpg
Completed Image ====> 865.slow_food.jpg
Completed Image ====> 866.slow_food.jpg
Completed Image ====> 867.slow_food.jpg
Completed Image ====> 868.slow_food.jpg

Everything downloaded!
Total errors: 32
Total time taken: 1138.184350013733 Seconds

Image preparation

In [8]:
import matplotlib.pyplot as plt
import matplotlib.image as img
import numpy as np
from PIL import Image

%matplotlib inline
In [9]:
root_dir = 'data_food_classifier_MG'
root_listdir = os.listdir(root_dir)

Some images may have been saved with the wrong extension. In addition, we must have consistency of extensions, so png images must be converted to jpg files.

In [10]:
counter = 0
counter_2 = 0

for i in range(len(root_listdir)):
    filename = root_dir + '/' + root_listdir[i]
    try:
        im = Image.open(filename)
        if '.png' in filename:
            im = im.convert('RGB')
            os.remove(filename)
            filename = filename.replace('png', 'jpg')
            root_listdir[i] = root_listdir[i].replace('png', 'jpg')
            im.save(filename)
            im = Image.open(filename)
            counter_2 += 1

        im.verify() #I perform also verify, don't know if he sees other types o defects
        im.close() #reload is necessary in my case
    except (OSError, ValueError):
        os.remove(filename)
        root_listdir[i] = 0
        counter += 1

print('%d files deleted due to OSError and  ValueError.' %counter)
print('%d files converted from png to jpg.' %counter_2)
C:\Users\Milosz\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\Image.py:989: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
  "Palette images with Transparency expressed in bytes should be "
C:\Users\Milosz\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\TiffImagePlugin.py:802: UserWarning: Corrupt EXIF data.  Expecting to read 4 bytes but only got 0. 
  warnings.warn(str(msg))
17 files deleted due to OSError and  ValueError.
110 files converted from png to jpg.
In [11]:
root_listdir = [i for i in root_listdir if i != 0]
list_of_images_indices = np.random.choice(len(root_listdir), 60)
fig, ax = plt.subplots(10, 6, frameon=False, figsize=(15, 25))
fig.suptitle('Random image from food class', fontsize=20)

row = 0
col = 0

ec = (0, .6, .1)
fc = (0, .7, .2)
for i in list_of_images_indices:
    try:
        image = Image.open(root_dir + '/' + root_listdir[i])
        image = image.resize((120, 120), Image.ANTIALIAS)
        class_name = root_listdir[i].split('.')[1].replace('_', ' ')
        ax[row][col].imshow(image)
        ax[row][col].text(0, -20, class_name, size=10, rotation=0, ha='left',
                         va='top', bbox=dict(boxstyle='round', ec=ec, fc=fc))
        
        ax[row][col].set_xticks([])
        ax[row][col].set_yticks([])

        col += 1
        if col % 6 == 0 and col*row != 54:
            col = 0
            row += 1
        elif col*row == 54:
            break
    except (OSError, ValueError) as e:
        print(e)

plt.tight_layout(rect=[0, 0.03, 1, 0.95])

Splitting images into train, test and valid sets.

In [12]:
import shutil

len_data = len(root_listdir)
train_set = 0.8
train_examples = round(len_data*train_set)
valid_examples = round((len_data - train_examples)*0.2)
test_examples = len_data - train_examples - valid_examples

labels = np.asarray([1 if 'fast_food' in i else 0 for i in root_listdir])

# randomly choose training and testing cases
permutation = np.random.permutation(len_data)
train_set = [root_listdir[i] for i in permutation[:][:train_examples]]
test_set = [root_listdir[i] for i in permutation[train_examples:-valid_examples]]
valid_set = [root_listdir[i] for i in permutation[-valid_examples:]]


train_labels = labels[permutation[:train_examples]]
test_labels = labels[permutation[train_examples:-valid_examples]]
valid_labels = labels[permutation[-valid_examples:]]

train_folder = root_dir + '/train'
test_folder = root_dir + '/test'
valid_folder = root_dir + '/valid'

    
os.makedirs(train_folder+'/fast_food/')
os.makedirs(train_folder+'/slow_food/')
os.makedirs(test_folder+'/fast_food/')
os.makedirs(test_folder+'/slow_food/')
os.makedirs(valid_folder+'/fast_food/')
os.makedirs(valid_folder+'/slow_food/')

for f,i in zip(train_set, train_labels):
    if i==0:
        shutil.move(root_dir + '/' + f, train_folder+'/slow_food/')
    else:
        shutil.move(root_dir + '/' + f, train_folder+'/fast_food/')

for f,i in zip(test_set, test_labels):
    if i==0:
        shutil.move(root_dir + '/' + f, test_folder+'/slow_food/')
    else:
        shutil.move(root_dir +  '/' + f, test_folder+'/fast_food/')

for f,i in zip(valid_set, valid_labels):
    if i==0:
        shutil.move(root_dir + '/' + f, valid_folder+'/slow_food/')
    else:
        shutil.move(root_dir +  '/' + f, valid_folder+'/fast_food/')

Classification models

In [13]:
import numpy as np
import tensorflow as tf
import keras
import matplotlib.pyplot as plt
import matplotlib.image as img
import random
import itertools

from PIL import Image
from sklearn.metrics import confusion_matrix

from keras.preprocessing.image import ImageDataGenerator
from keras import applications, backend as K
from keras.models import Sequential, Model
from keras.layers import Dense, Activation, Conv2D, MaxPool2D, Flatten, BatchNormalization, Dropout
from keras.layers.core import Dense, Flatten
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import *
from keras.optimizers import Adam
from keras.metrics import categorical_crossentropy

%matplotlib inline
In [14]:
channels = 3
batch_size = 32

Functions

In [15]:
def plot_accuracy_loss(history):
    """
    Function plotting:
    :accuracy and validation accuracy on firs plot
    :loss and validation loss on second plot
    """
    fig = plt.figure(figsize=(10,5))
 
    plt.subplot(1, 2, 1)
    plt.plot(history.history['accuracy'])
    plt.plot(history.history['val_accuracy'])
    plt.title('model accuracy')
    plt.ylabel('accuracy')
    plt.xlabel('epoch')
    plt.legend(['train', 'validation'], loc='upper left')
    plt.ylim([0, 1])
 
    plt.subplot(1, 2, 2)
    plt.plot(history.history['loss'])
    plt.plot(history.history['val_loss'])
    plt.title('model loss')
    plt.ylabel('loss')
    plt.xlabel('epoch')
    plt.legend(['train', 'test'], loc='upper right')
    plt.show()
In [16]:
def plot_predictions(filenames, preds):
    """
    Method plotting test set with predictions.
    :param preds - list of predictions for test set.
    :param filenames - list of filenames in test set.
    """
    root_listdir = filenames[:60]
    preds = preds[:60]

    fig, ax = plt.subplots(10, 6, frameon=False, figsize=(15, 25))
    fig.suptitle('Predictions from test set', fontsize=20)

    row = 0
    col = 0
    
    wrong_prediction_filenames = []
    ec = (0, .6, .1)
    for i in range(len(root_listdir)):
        try:
            if 'slow_food' in  root_listdir[int(i)]:
                last_dir = 'slow_food'
                class_number = 0
            else:
                last_dir = 'fast_food'
                class_number = 1

            if preds[i] == 0:
                class_name = 'slow food'
            else:
                class_name = 'fast food'

            image = Image.open(root_dir + '/test/' + last_dir + '/' + root_listdir[int(i)])
            image = image.resize((120, 120), Image.ANTIALIAS)
            ax[row][col].imshow(image)

            if class_number != preds[i]:
                fc = (1, .0, .0)
                wrong_prediction_filenames.append(root_listdir[int(i)])
            else:
                fc = (0, .7, .2)

            ax[row][col].text(0, -20, class_name, size=10, rotation=0, ha='left',
                             va='top', bbox=dict(boxstyle='round', ec=ec, fc=fc))

            ax[row][col].set_xticks([])
            ax[row][col].set_yticks([])

            col += 1
            if col % 6 == 0 and col*row != 54:
                col = 0
                row += 1
            elif col*row == 54:
                break
        except (OSError, ValueError) as e:
            print(e)
    return wrong_prediction_filenames
In [17]:
def plot_confusion_matrix(cm, classes, normalize=False, title='Confusion matrix', cmap=plt.cm.Blues):
    """
    This function prints and plots the confusion matrix.
    Normalization can be applied by setting 'normalize=True'
    """
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=45)
    plt.yticks(tick_marks, classes)
    
    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
        print('Normalized confusion matrix')
    else:
        print('Confusion matrix, without normalization')
    print(cm)
    
    tresh = cm.max() / 2
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(round(j, 2), round(i, 2), round(cm[i, j], 2), horizontalalignment='center', color='white' if cm[i, j] > tresh else 'black')
    
    ax = plt.gca()  # only to illustrate what `ax` is
    ax.autoscale(enable=True, axis='y', tight=False)
    
    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

Logistic regression

First attempt should be simple so we will check Logistic Regression on our data.

In [18]:
img_height = img_width = 224
batch_size = 32
channels = 3
In [19]:
train_generator = ImageDataGenerator(rescale=1./255,
                                     rotation_range=5,
                                     zoom_range=0.2, 
                                     horizontal_flip=True).flow_from_directory(
    train_folder,
    color_mode = "rgb",
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='binary')

test_generator = ImageDataGenerator(rescale=1./255,
                                    rotation_range=5,
                                    zoom_range=0.2,
                                    horizontal_flip=True).flow_from_directory(
    train_folder,
    color_mode = "rgb",
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='binary')

x_train, y_train = next(train_generator)
x_test, y_test = next(test_generator)
Found 1362 images belonging to 2 classes.
Found 1362 images belonging to 2 classes.
In [20]:
from sklearn.linear_model import LogisticRegression
logistic = LogisticRegression(solver='liblinear')
logistic.fit(x_train.reshape(batch_size,-1), y_train)
Out[20]:
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='warn', n_jobs=None, penalty='l2',
                   random_state=None, solver='liblinear', tol=0.0001, verbose=0,
                   warm_start=False)
In [21]:
y_pred = logistic.predict(x_test.reshape(len(x_test), -1))
y_pred[:10]
Out[21]:
array([0., 1., 0., 0., 0., 0., 1., 0., 0., 0.], dtype=float32)
In [22]:
logistic.predict_proba(x_test[:3].reshape(3,-1))
Out[22]:
array([[9.35844574e-01, 6.41554257e-02],
       [4.87977419e-02, 9.51202258e-01],
       [9.99938578e-01, 6.14215270e-05]])
In [23]:
np.count_nonzero(y_pred == y_test)/len(y_test)
Out[23]:
0.6875

Model accuracy is not satisfactory.

Build Fine-tuned VGG16 model

Now we will try to use pretrained model VGG16. The model achieves 92.7% top-5 test accuracy in ImageNet, which is a dataset of over 14 million images belonging to 1000 classes.

In [24]:
K.clear_session()
In [25]:
vgg16_model = applications.vgg16.VGG16()
In [26]:
vgg16_model = applications.vgg16.VGG16()
In [27]:
vgg16_model.summary()
Model: "vgg16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_2 (InputLayer)         (None, 224, 224, 3)       0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc2 (Dense)                  (None, 4096)              16781312  
_________________________________________________________________
predictions (Dense)          (None, 1000)              4097000   
=================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
_________________________________________________________________
In [28]:
model = Sequential()
for layer in vgg16_model.layers:
    model.add(layer)
In [29]:
model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc2 (Dense)                  (None, 4096)              16781312  
_________________________________________________________________
predictions (Dense)          (None, 1000)              4097000   
=================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
_________________________________________________________________

We should pop dense layers.

In [30]:
model.layers.pop()
model.layers.pop()
model.layers.pop()
Out[30]:
<keras.layers.core.Dense at 0x263bd227f28>
In [31]:
for layer in model.layers:
    layer.trainable = False
In [32]:
model.add(Dense(2, activation='sigmoid'))
In [33]:
model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc2 (Dense)                  (None, 4096)              16781312  
_________________________________________________________________
predictions (Dense)          (None, 1000)              4097000   
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 2002      
=================================================================
Total params: 138,359,546
Trainable params: 2,002
Non-trainable params: 138,357,544
_________________________________________________________________
In [34]:
img_height = img_width = 224
batch_size = 32
channels = 3

train_batches = ImageDataGenerator(rescale=1./255,
                                   rotation_range=5,
                                   zoom_range=0.2,
                                   horizontal_flip=True).flow_from_directory(
    train_folder,
    color_mode = "rgb",
    target_size=(img_height, img_width),
    batch_size=10,
    classes=['fast_food', 'slow_food'])

test_batches = ImageDataGenerator(rescale=1./255,
                                  rotation_range=5,
                                  zoom_range=0.2,
                                  horizontal_flip=True).flow_from_directory(
    test_folder,
    color_mode = "rgb",
    target_size=(img_height, img_width),
    batch_size=10,
    classes=['fast_food', 'slow_food'],
    shuffle=False)

valid_batches = ImageDataGenerator(rescale=1./255,
                                   rotation_range=5,
                                   zoom_range=0.2,
                                   horizontal_flip=True).flow_from_directory(
    valid_folder,
    color_mode = "rgb",
    target_size=(img_height, img_width),
    batch_size=4,
    classes=['fast_food', 'slow_food'])
Found 1362 images belonging to 2 classes.
Found 272 images belonging to 2 classes.
Found 68 images belonging to 2 classes.

Train the fine-tuned VGG16 model

In [35]:
model.compile(Adam(lr=.001), loss='categorical_crossentropy', metrics=['accuracy'])
In [36]:
history = model.fit_generator(train_batches, train_examples//10, validation_data=valid_batches, validation_steps= valid_examples//4 + 1, epochs=4, verbose=2)
Epoch 1/4
C:\Users\Milosz\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\TiffImagePlugin.py:802: UserWarning: Corrupt EXIF data.  Expecting to read 4 bytes but only got 0. 
  warnings.warn(str(msg))
 - 253s - loss: 0.6927 - accuracy: 0.5459 - val_loss: 0.6956 - val_accuracy: 0.5694
Epoch 2/4
 - 251s - loss: 0.6916 - accuracy: 0.6072 - val_loss: 0.6874 - val_accuracy: 0.5972
Epoch 3/4
 - 260s - loss: 0.6907 - accuracy: 0.5799 - val_loss: 0.6969 - val_accuracy: 0.5833
Epoch 4/4
 - 257s - loss: 0.6896 - accuracy: 0.6457 - val_loss: 0.6961 - val_accuracy: 0.6250
In [37]:
predictions = model.predict_generator(test_batches, test_examples//10)
In [38]:
correct = 0
for i, f in enumerate(test_batches.filenames[:len(predictions)]):
    if 'slow_food' in f and predictions[i][0]<0.5:
        correct +=1
    if 'fast_food' in f and predictions[i][0]>=0.5:
        correct +=1

print('Correct predictions: '+str(correct/len(test_batches.filenames)))
Correct predictions: 0.6433823529411765
In [39]:
plot_accuracy_loss(history)
In [40]:
c = list(zip([i.split('\\')[1] for i in test_batches.filenames],[1 if i[0] >= 0.5 else 0 for i in predictions]))
my_list = random.shuffle(c)

filenames, preds = zip(*c)
In [41]:
wrong_predictions = plot_predictions(filenames, preds)
In [42]:
wrong_predictions
Out[42]:
['85.fast_food.jpg',
 '310.fast_food.jpg',
 '414.fast_food.jpg',
 '173.fast_food.jpeg',
 '286.fast_food.jpg',
 '372.slow_food.jpg',
 '499.fast_food.jpg',
 '835.slow_food.jpg',
 '723.fast_food.jpg',
 '552.slow_food.jpg',
 '69.fast_food.jpeg',
 '86.fast_food.jpg',
 '273.slow_food.jpg',
 '487.fast_food.jpg',
 '448.slow_food.jpg',
 '594.fast_food.jpg',
 '821.fast_food.jpg',
 '7.fast_food.jpeg',
 '203.fast_food.jpg',
 '538.fast_food.jpg',
 '277.fast_food.jpg',
 '833.fast_food.jpg']
In [43]:
test_labels = np.array([0 if 'slow_food' in f else 1 for f in test_batches.filenames])[:len(predictions)]
cm = confusion_matrix(test_labels, np.round(predictions[:,0]))
In [44]:
cm_plot_labels = ['fast_food', 'slow_food']
plot_confusion_matrix(cm, cm_plot_labels, title='Confusion Matrix')
Confusion matrix, without normalization
[[112  31]
 [ 64  63]]

Model performed better than simple guessing, but it is still less accurate than Logistic Regression.

Sequential model

Pretrained model didn't pass the exam. Now we will try create our own model.

In [45]:
K.clear_session()
In [46]:
model = Sequential()

model.add(Conv2D(8, kernel_size=(3,3), padding='same', input_shape = (img_width,img_height,channels)))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2, 2)))

model.add(Conv2D(16, kernel_size=(3,3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2, 2)))

model.add(Conv2D(32, kernel_size=(3,3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(2, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
In [47]:
model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 224, 224, 8)       224       
_________________________________________________________________
activation_1 (Activation)    (None, 224, 224, 8)       0         
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 112, 112, 8)       0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 112, 112, 16)      1168      
_________________________________________________________________
batch_normalization_1 (Batch (None, 112, 112, 16)      64        
_________________________________________________________________
activation_2 (Activation)    (None, 112, 112, 16)      0         
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 56, 56, 16)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 56, 56, 32)        4640      
_________________________________________________________________
batch_normalization_2 (Batch (None, 56, 56, 32)        128       
_________________________________________________________________
activation_3 (Activation)    (None, 56, 56, 32)        0         
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 28, 28, 32)        0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 25088)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 50178     
=================================================================
Total params: 56,402
Trainable params: 56,306
Non-trainable params: 96
_________________________________________________________________
In [48]:
train_batches= ImageDataGenerator(rescale=1./255,
                                   rotation_range=5,
                                   zoom_range=0.2,
                                   horizontal_flip=True).flow_from_directory(
    train_folder,
    color_mode = "rgb",
    target_size=(img_height, img_width),
    batch_size=batch_size,
    classes=['fast_food', 'slow_food'])

test_batches = ImageDataGenerator(rescale=1./255,
                                   rotation_range=5,
                                   zoom_range=0.2,
                                   horizontal_flip=True).flow_from_directory(
    test_folder,
    color_mode = "rgb",
    target_size=(img_height, img_width),
    batch_size=batch_size,
    classes=['fast_food', 'slow_food'],
    shuffle=False)
Found 1362 images belonging to 2 classes.
Found 272 images belonging to 2 classes.
In [49]:
model.fit_generator(train_batches, train_examples//batch_size, epochs=2)
Epoch 1/2
38/42 [==========================>...] - ETA: 1:04 - loss: 0.7926 - accuracy: 0.53 - ETA: 52s - loss: 7.4288 - accuracy: 0.5312 - ETA: 54s - loss: 7.8656 - accuracy: 0.520 - ETA: 48s - loss: 8.2194 - accuracy: 0.539 - ETA: 49s - loss: 6.7679 - accuracy: 0.562 - ETA: 47s - loss: 6.5959 - accuracy: 0.552 - ETA: 42s - loss: 6.2878 - accuracy: 0.550 - ETA: 41s - loss: 6.1506 - accuracy: 0.547 - ETA: 38s - loss: 5.5757 - accuracy: 0.574 - ETA: 37s - loss: 5.1357 - accuracy: 0.585 - ETA: 36s - loss: 4.9928 - accuracy: 0.579 - ETA: 35s - loss: 4.9174 - accuracy: 0.574 - ETA: 34s - loss: 4.6965 - accuracy: 0.579 - ETA: 32s - loss: 4.4852 - accuracy: 0.584 - ETA: 30s - loss: 4.3719 - accuracy: 0.580 - ETA: 29s - loss: 4.3035 - accuracy: 0.581 - ETA: 28s - loss: 4.2384 - accuracy: 0.585 - ETA: 26s - loss: 4.0515 - accuracy: 0.597 - ETA: 25s - loss: 3.8817 - accuracy: 0.605 - ETA: 24s - loss: 3.8600 - accuracy: 0.600 - ETA: 24s - loss: 3.7900 - accuracy: 0.604 - ETA: 22s - loss: 3.6788 - accuracy: 0.605 - ETA: 21s - loss: 3.6782 - accuracy: 0.604 - ETA: 20s - loss: 3.5962 - accuracy: 0.609 - ETA: 19s - loss: 3.4858 - accuracy: 0.615 - ETA: 17s - loss: 3.3695 - accuracy: 0.624 - ETA: 16s - loss: 3.3100 - accuracy: 0.628 - ETA: 15s - loss: 3.2781 - accuracy: 0.629 - ETA: 14s - loss: 3.2189 - accuracy: 0.631 - ETA: 13s - loss: 3.1987 - accuracy: 0.630 - ETA: 12s - loss: 3.1882 - accuracy: 0.630 - ETA: 11s - loss: 3.1618 - accuracy: 0.628 - ETA: 10s - loss: 3.1470 - accuracy: 0.628 - ETA: 8s - loss: 3.0831 - accuracy: 0.631 - ETA: 7s - loss: 3.0270 - accuracy: 0.63 - ETA: 6s - loss: 2.9857 - accuracy: 0.63 - ETA: 5s - loss: 2.9548 - accuracy: 0.63 - ETA: 4s - loss: 3.0000 - accuracy: 0.6285
C:\Users\Milosz\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\TiffImagePlugin.py:802: UserWarning: Corrupt EXIF data.  Expecting to read 4 bytes but only got 0. 
  warnings.warn(str(msg))
42/42 [==============================] - ETA: 3s - loss: 2.9844 - accuracy: 0.63 - ETA: 2s - loss: 2.9405 - accuracy: 0.63 - ETA: 1s - loss: 2.8769 - accuracy: 0.63 - 47s 1s/step - loss: 2.8413 - accuracy: 0.6391
Epoch 2/2
42/42 [==============================] - ETA: 39s - loss: 0.8608 - accuracy: 0.750 - ETA: 37s - loss: 0.8732 - accuracy: 0.773 - ETA: 37s - loss: 0.9998 - accuracy: 0.729 - ETA: 37s - loss: 1.5711 - accuracy: 0.675 - ETA: 38s - loss: 1.7916 - accuracy: 0.659 - ETA: 36s - loss: 1.7025 - accuracy: 0.679 - ETA: 38s - loss: 1.6737 - accuracy: 0.685 - ETA: 37s - loss: 1.5826 - accuracy: 0.693 - ETA: 36s - loss: 1.5848 - accuracy: 0.694 - ETA: 35s - loss: 1.4962 - accuracy: 0.700 - ETA: 34s - loss: 1.4744 - accuracy: 0.696 - ETA: 34s - loss: 1.4472 - accuracy: 0.695 - ETA: 33s - loss: 1.4220 - accuracy: 0.697 - ETA: 32s - loss: 1.3983 - accuracy: 0.697 - ETA: 31s - loss: 1.4317 - accuracy: 0.692 - ETA: 29s - loss: 1.5246 - accuracy: 0.683 - ETA: 28s - loss: 1.6604 - accuracy: 0.675 - ETA: 27s - loss: 1.6905 - accuracy: 0.673 - ETA: 26s - loss: 1.6501 - accuracy: 0.679 - ETA: 25s - loss: 1.6451 - accuracy: 0.678 - ETA: 24s - loss: 1.6753 - accuracy: 0.678 - ETA: 23s - loss: 1.6956 - accuracy: 0.675 - ETA: 21s - loss: 1.7214 - accuracy: 0.673 - ETA: 20s - loss: 1.6961 - accuracy: 0.679 - ETA: 19s - loss: 1.6570 - accuracy: 0.682 - ETA: 18s - loss: 1.6552 - accuracy: 0.684 - ETA: 17s - loss: 1.6075 - accuracy: 0.692 - ETA: 15s - loss: 1.5770 - accuracy: 0.697 - ETA: 14s - loss: 1.5652 - accuracy: 0.696 - ETA: 13s - loss: 1.6608 - accuracy: 0.684 - ETA: 12s - loss: 1.7267 - accuracy: 0.682 - ETA: 11s - loss: 1.7099 - accuracy: 0.682 - ETA: 10s - loss: 1.8135 - accuracy: 0.675 - ETA: 8s - loss: 1.8059 - accuracy: 0.676 - ETA: 7s - loss: 1.7643 - accuracy: 0.68 - ETA: 6s - loss: 1.7471 - accuracy: 0.68 - ETA: 5s - loss: 1.7566 - accuracy: 0.68 - ETA: 4s - loss: 1.7424 - accuracy: 0.68 - ETA: 3s - loss: 1.7230 - accuracy: 0.69 - ETA: 2s - loss: 1.7077 - accuracy: 0.68 - ETA: 1s - loss: 1.7223 - accuracy: 0.68 - 46s 1s/step - loss: 1.7009 - accuracy: 0.6921
Out[49]:
<keras.callbacks.callbacks.History at 0x263c1812e80>
In [50]:
y_pred = model.predict_generator(test_batches, test_examples//batch_size, workers=4)
In [51]:
correct = 0
for i, f in enumerate(test_batches.filenames[:len(y_pred)]):
    if 'slow_food' in f and y_pred[i][0]<0.5:
        correct +=1
    if 'fast_food' in f and y_pred[i][0]>=0.5:
        correct +=1

print('Correct predictions: '+str(correct/len(test_batches.filenames)))
Correct predictions: 0.5220588235294118
In [52]:
c = list(zip([i.split('\\')[1] for i in test_batches.filenames],[1 if i[0] >= 0.5 else 0 for i in y_pred]))
my_list = random.shuffle(c)

filenames_2, preds_2 = zip(*c)
In [53]:
wrong_predictions_2 = plot_predictions(filenames_2, preds_2)
In [54]:
wrong_predictions_2
Out[54]:
['294.slow_food.jpg',
 '27.slow_food.jpg',
 '717.slow_food.jpg',
 '203.slow_food.jpg',
 '52.slow_food.jpg',
 '597.slow_food.jpg',
 '585.slow_food.jpg',
 '486.slow_food.jpg',
 '447.slow_food.jpg',
 '183.slow_food.jpg',
 '411.slow_food.jpg',
 '273.slow_food.jpg',
 '778.slow_food.jpg',
 '542.slow_food.jpg',
 '555.slow_food.jpg',
 '538.slow_food.jpg',
 '199.slow_food.jpg',
 '365.slow_food.jpg',
 '111.slow_food.jpg',
 '581.slow_food.jpg',
 '765.slow_food.jpg',
 '242.slow_food.jpg',
 '256.slow_food.jpg',
 '704.slow_food.jpg',
 '338.slow_food.jpg',
 '684.slow_food.jpg',
 '159.slow_food.jpg']
In [55]:
test_labels = np.array([0 if 'slow_food' in f else 1 for f in test_batches.filenames])[:len(y_pred)]
cm = confusion_matrix(test_labels, np.round(y_pred[:, 0]))
In [56]:
cm_plot_labels = ['fast_food', 'slow_food']
plot_confusion_matrix(cm, cm_plot_labels, title='Confusion Matrix')
Confusion matrix, without normalization
[[ 27 102]
 [ 12 115]]

Model is much worse than previous ones. It means that simple model won't be enough, because we don't have big dataset.

Transfer learning

Last attempt is transfer learning. We will use VGG16 again but this time in other way.

In [57]:
K.clear_session()
In [58]:
model = applications.VGG16(include_top=False, input_shape=(img_width, img_height, channels))
In [59]:
batch_size = 32
img_height = img_width = 224
channels = 3

train_batches_1 = ImageDataGenerator(rescale=1./255,
                                   rotation_range=5,
                                   zoom_range=0.2,
                                   horizontal_flip=True).flow_from_directory(
    train_folder,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode=None,
    shuffle=False)

train_batches_2 = ImageDataGenerator(rescale=1./255,
                                   rotation_range=5,
                                   zoom_range=0.2,
                                   horizontal_flip=True).flow_from_directory(
    train_folder,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode=None,
    shuffle=False)

test_batches = ImageDataGenerator(rescale=1./255,
                                   rotation_range=5,
                                   zoom_range=0.2,
                                   horizontal_flip=True).flow_from_directory(
    test_folder,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='binary',
    shuffle=False)

valid_batches = ImageDataGenerator(rescale=1./255,
                                   rotation_range=5,
                                   zoom_range=0.2,
                                   horizontal_flip=True).flow_from_directory(
    valid_folder,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode=None,
    shuffle=False)
Found 1362 images belonging to 2 classes.
Found 1362 images belonging to 2 classes.
Found 272 images belonging to 2 classes.
Found 68 images belonging to 2 classes.
In [60]:
model = applications.VGG16(include_top=False, weights='imagenet')
model.summary()
Model: "vgg16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_2 (InputLayer)         (None, None, None, 3)     0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, None, None, 64)    1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, None, None, 64)    36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, None, None, 64)    0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, None, None, 128)   73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, None, None, 128)   147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, None, None, 128)   0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, None, None, 256)   295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, None, None, 256)   590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, None, None, 256)   590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, None, None, 256)   0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, None, None, 512)   1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, None, None, 512)   2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, None, None, 512)   2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, None, None, 512)   0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, None, None, 512)   2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, None, None, 512)   2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, None, None, 512)   2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, None, None, 512)   0         
=================================================================
Total params: 14,714,688
Trainable params: 14,714,688
Non-trainable params: 0
_________________________________________________________________

Training VGG16 on our data should give us the bottleneks of our images. In this case we will use VGG16 predictions to train our sequential model. It means that we changed sets of images into sets of bottlenecks which could be more helpful in detecting category.

In [61]:
bottleneck_features_train = model.predict_generator(train_batches_1, train_examples//batch_size, verbose=1, workers=4)
bottleneck_features_valid = model.predict_generator(valid_batches, test_examples//batch_size, verbose=1, workers=4)
bottleneck_features_test = model.predict_generator(test_batches, test_examples//batch_size, verbose=1, workers=4)

bottleneck_features_train.shape
42/42 [==============================] - ETA: 5: - ETA: 4: - ETA: 4: - ETA: 3: - ETA: 3: - ETA: 3: - ETA: 3: - ETA: 3: - ETA: 3: - ETA: 3: - ETA: 3: - ETA: 2: - ETA: 2: - ETA: 2: - ETA: 2: - ETA: 2: - ETA: 2: - ETA: 2: - ETA: 2: - ETA: 2: - ETA: 2: - ETA: 1: - ETA: 1: - ETA: 1: - ETA: 1: - ETA: 1: - ETA: 1: - ETA: 1: - ETA: 1: - ETA: 1: - ETA: 1: - ETA: 59s - ETA: 53 - ETA: 47 - ETA: 41 - ETA: 35 - ETA: 29 - ETA: 24 - ETA: 18 - ETA: 12 - ETA: 5 - 252s 6s/step
8/8 [==============================] - ETA: 46 - ETA: 36 - ETA: 21 - ETA: 19 - ETA: 14 - ETA: 8 - ETA:  - 38s 5s/step
8/8 [==============================] - ETA: 57 - ETA: 42 - ETA: 32 - ETA: 25 - ETA: 19 - ETA: 12 - ETA: 6 - 49s 6s/step
Out[61]:
(1344, 7, 7, 512)
In [62]:
model = Sequential()
model.add(Flatten(input_shape=bottleneck_features_train.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy', metrics=['accuracy'])
model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten_1 (Flatten)          (None, 25088)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 256)               6422784   
_________________________________________________________________
dropout_1 (Dropout)          (None, 256)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 257       
=================================================================
Total params: 6,423,041
Trainable params: 6,423,041
Non-trainable params: 0
_________________________________________________________________
In [63]:
labels = np.array([0 if 'slow_food' in f else 1 for f in train_batches_2.filenames])[:len(bottleneck_features_train)]
val_labels = np.array([0 if 'slow_food' in f else 1 for f in valid_batches.filenames])[:len(bottleneck_features_valid)]

history_2 = model.fit(bottleneck_features_train, labels, validation_data=(bottleneck_features_valid[:len(val_labels)], val_labels), epochs=20, batch_size=batch_size)
Train on 1344 samples, validate on 68 samples
Epoch 1/20
1344/1344 [==============================] - ETA: 6s - loss: 1.0893 - accuracy: 0.40 - ETA: 4s - loss: 10.2667 - accuracy: 0.484 - ETA: 3s - loss: 9.2927 - accuracy: 0.500 - ETA: 3s - loss: 8.9889 - accuracy: 0.50 - ETA: 3s - loss: 7.9174 - accuracy: 0.53 - ETA: 2s - loss: 7.1078 - accuracy: 0.52 - ETA: 2s - loss: 6.5790 - accuracy: 0.52 - ETA: 2s - loss: 6.1400 - accuracy: 0.50 - ETA: 2s - loss: 6.5108 - accuracy: 0.49 - ETA: 2s - loss: 6.1595 - accuracy: 0.50 - ETA: 2s - loss: 5.7594 - accuracy: 0.50 - ETA: 2s - loss: 5.4467 - accuracy: 0.52 - ETA: 1s - loss: 5.1517 - accuracy: 0.52 - ETA: 1s - loss: 4.9737 - accuracy: 0.52 - ETA: 1s - loss: 4.8826 - accuracy: 0.52 - ETA: 1s - loss: 4.7472 - accuracy: 0.52 - ETA: 1s - loss: 4.6414 - accuracy: 0.52 - ETA: 1s - loss: 4.5635 - accuracy: 0.52 - ETA: 1s - loss: 4.4513 - accuracy: 0.52 - ETA: 1s - loss: 4.2711 - accuracy: 0.53 - ETA: 1s - loss: 4.1265 - accuracy: 0.53 - ETA: 1s - loss: 3.9875 - accuracy: 0.54 - ETA: 1s - loss: 3.8560 - accuracy: 0.54 - ETA: 1s - loss: 3.7512 - accuracy: 0.55 - ETA: 1s - loss: 3.6431 - accuracy: 0.55 - ETA: 0s - loss: 3.5314 - accuracy: 0.56 - ETA: 0s - loss: 3.4432 - accuracy: 0.56 - ETA: 0s - loss: 3.3602 - accuracy: 0.56 - ETA: 0s - loss: 3.2948 - accuracy: 0.56 - ETA: 0s - loss: 3.2211 - accuracy: 0.56 - ETA: 0s - loss: 3.1386 - accuracy: 0.57 - ETA: 0s - loss: 3.0630 - accuracy: 0.57 - ETA: 0s - loss: 2.9910 - accuracy: 0.58 - ETA: 0s - loss: 2.9198 - accuracy: 0.58 - ETA: 0s - loss: 2.8492 - accuracy: 0.59 - ETA: 0s - loss: 2.7925 - accuracy: 0.59 - ETA: 0s - loss: 2.7430 - accuracy: 0.59 - ETA: 0s - loss: 2.6925 - accuracy: 0.59 - ETA: 0s - loss: 2.6378 - accuracy: 0.59 - ETA: 0s - loss: 2.5873 - accuracy: 0.59 - ETA: 0s - loss: 2.5445 - accuracy: 0.59 - 2s 2ms/step - loss: 2.4950 - accuracy: 0.6019 - val_loss: 0.5732 - val_accuracy: 0.6471
Epoch 2/20
1344/1344 [==============================] - ETA: 2s - loss: 0.3788 - accuracy: 0.84 - ETA: 2s - loss: 0.3744 - accuracy: 0.85 - ETA: 2s - loss: 0.5776 - accuracy: 0.75 - ETA: 2s - loss: 0.6285 - accuracy: 0.73 - ETA: 1s - loss: 0.5823 - accuracy: 0.75 - ETA: 1s - loss: 0.5975 - accuracy: 0.75 - ETA: 1s - loss: 0.5550 - accuracy: 0.76 - ETA: 1s - loss: 0.5403 - accuracy: 0.76 - ETA: 1s - loss: 0.5242 - accuracy: 0.76 - ETA: 1s - loss: 0.5657 - accuracy: 0.75 - ETA: 1s - loss: 0.5888 - accuracy: 0.74 - ETA: 1s - loss: 0.5984 - accuracy: 0.74 - ETA: 1s - loss: 0.6006 - accuracy: 0.74 - ETA: 1s - loss: 0.6008 - accuracy: 0.73 - ETA: 1s - loss: 0.5880 - accuracy: 0.74 - ETA: 1s - loss: 0.5920 - accuracy: 0.73 - ETA: 1s - loss: 0.5973 - accuracy: 0.73 - ETA: 1s - loss: 0.6041 - accuracy: 0.72 - ETA: 1s - loss: 0.5975 - accuracy: 0.73 - ETA: 1s - loss: 0.6032 - accuracy: 0.73 - ETA: 1s - loss: 0.6278 - accuracy: 0.72 - ETA: 1s - loss: 0.6258 - accuracy: 0.72 - ETA: 1s - loss: 0.6243 - accuracy: 0.73 - ETA: 1s - loss: 0.6291 - accuracy: 0.72 - ETA: 0s - loss: 0.6546 - accuracy: 0.72 - ETA: 0s - loss: 0.6507 - accuracy: 0.72 - ETA: 0s - loss: 0.6471 - accuracy: 0.72 - ETA: 0s - loss: 0.6385 - accuracy: 0.72 - ETA: 0s - loss: 0.6390 - accuracy: 0.72 - ETA: 0s - loss: 0.6520 - accuracy: 0.72 - ETA: 0s - loss: 0.6495 - accuracy: 0.72 - ETA: 0s - loss: 0.6451 - accuracy: 0.72 - ETA: 0s - loss: 0.6439 - accuracy: 0.72 - ETA: 0s - loss: 0.6476 - accuracy: 0.71 - ETA: 0s - loss: 0.6413 - accuracy: 0.72 - ETA: 0s - loss: 0.6317 - accuracy: 0.72 - ETA: 0s - loss: 0.6298 - accuracy: 0.72 - ETA: 0s - loss: 0.6243 - accuracy: 0.72 - ETA: 0s - loss: 0.6253 - accuracy: 0.72 - ETA: 0s - loss: 0.6284 - accuracy: 0.72 - ETA: 0s - loss: 0.6647 - accuracy: 0.71 - 2s 2ms/step - loss: 0.6669 - accuracy: 0.7158 - val_loss: 0.6566 - val_accuracy: 0.5882
Epoch 3/20
1344/1344 [==============================] - ETA: 2s - loss: 0.7247 - accuracy: 0.59 - ETA: 2s - loss: 0.5755 - accuracy: 0.67 - ETA: 2s - loss: 0.5054 - accuracy: 0.72 - ETA: 2s - loss: 0.4499 - accuracy: 0.77 - ETA: 2s - loss: 0.4338 - accuracy: 0.79 - ETA: 2s - loss: 0.4605 - accuracy: 0.78 - ETA: 2s - loss: 0.5157 - accuracy: 0.76 - ETA: 2s - loss: 0.5129 - accuracy: 0.76 - ETA: 2s - loss: 0.4820 - accuracy: 0.77 - ETA: 2s - loss: 0.4556 - accuracy: 0.79 - ETA: 1s - loss: 0.4408 - accuracy: 0.80 - ETA: 1s - loss: 0.4511 - accuracy: 0.79 - ETA: 1s - loss: 0.4547 - accuracy: 0.78 - ETA: 1s - loss: 0.4507 - accuracy: 0.78 - ETA: 1s - loss: 0.4538 - accuracy: 0.78 - ETA: 1s - loss: 0.4845 - accuracy: 0.77 - ETA: 1s - loss: 0.5195 - accuracy: 0.76 - ETA: 1s - loss: 0.5225 - accuracy: 0.76 - ETA: 1s - loss: 0.5488 - accuracy: 0.75 - ETA: 1s - loss: 0.5516 - accuracy: 0.75 - ETA: 1s - loss: 0.5476 - accuracy: 0.75 - ETA: 1s - loss: 0.5466 - accuracy: 0.75 - ETA: 1s - loss: 0.5367 - accuracy: 0.76 - ETA: 1s - loss: 0.5248 - accuracy: 0.76 - ETA: 1s - loss: 0.5190 - accuracy: 0.77 - ETA: 1s - loss: 0.5087 - accuracy: 0.77 - ETA: 0s - loss: 0.5280 - accuracy: 0.76 - ETA: 0s - loss: 0.5359 - accuracy: 0.76 - ETA: 0s - loss: 0.5333 - accuracy: 0.76 - ETA: 0s - loss: 0.5305 - accuracy: 0.76 - ETA: 0s - loss: 0.5519 - accuracy: 0.76 - ETA: 0s - loss: 0.5519 - accuracy: 0.75 - ETA: 0s - loss: 0.5507 - accuracy: 0.75 - ETA: 0s - loss: 0.5605 - accuracy: 0.75 - ETA: 0s - loss: 0.5882 - accuracy: 0.75 - ETA: 0s - loss: 0.5886 - accuracy: 0.74 - ETA: 0s - loss: 0.6103 - accuracy: 0.73 - ETA: 0s - loss: 0.6065 - accuracy: 0.73 - ETA: 0s - loss: 0.6011 - accuracy: 0.74 - ETA: 0s - loss: 0.5929 - accuracy: 0.74 - ETA: 0s - loss: 0.5867 - accuracy: 0.74 - 3s 2ms/step - loss: 0.5834 - accuracy: 0.7485 - val_loss: 0.4491 - val_accuracy: 0.7206
Epoch 4/20
1344/1344 [==============================] - ETA: 2s - loss: 0.5769 - accuracy: 0.78 - ETA: 2s - loss: 0.5498 - accuracy: 0.78 - ETA: 2s - loss: 0.4295 - accuracy: 0.84 - ETA: 2s - loss: 0.4457 - accuracy: 0.82 - ETA: 2s - loss: 0.4304 - accuracy: 0.83 - ETA: 2s - loss: 0.4422 - accuracy: 0.80 - ETA: 2s - loss: 0.4563 - accuracy: 0.80 - ETA: 2s - loss: 0.5051 - accuracy: 0.78 - ETA: 2s - loss: 0.4970 - accuracy: 0.79 - ETA: 2s - loss: 0.4735 - accuracy: 0.80 - ETA: 2s - loss: 0.4754 - accuracy: 0.79 - ETA: 2s - loss: 0.4726 - accuracy: 0.79 - ETA: 2s - loss: 0.5181 - accuracy: 0.77 - ETA: 1s - loss: 0.5714 - accuracy: 0.75 - ETA: 1s - loss: 0.5850 - accuracy: 0.75 - ETA: 1s - loss: 0.5727 - accuracy: 0.75 - ETA: 1s - loss: 0.5616 - accuracy: 0.76 - ETA: 1s - loss: 0.5605 - accuracy: 0.76 - ETA: 1s - loss: 0.5402 - accuracy: 0.77 - ETA: 1s - loss: 0.5223 - accuracy: 0.78 - ETA: 1s - loss: 0.5091 - accuracy: 0.79 - ETA: 1s - loss: 0.4965 - accuracy: 0.79 - ETA: 1s - loss: 0.4938 - accuracy: 0.79 - ETA: 1s - loss: 0.4864 - accuracy: 0.79 - ETA: 1s - loss: 0.4844 - accuracy: 0.79 - ETA: 1s - loss: 0.4916 - accuracy: 0.78 - ETA: 1s - loss: 0.4928 - accuracy: 0.79 - ETA: 0s - loss: 0.4891 - accuracy: 0.79 - ETA: 0s - loss: 0.4855 - accuracy: 0.79 - ETA: 0s - loss: 0.4841 - accuracy: 0.79 - ETA: 0s - loss: 0.4968 - accuracy: 0.79 - ETA: 0s - loss: 0.5012 - accuracy: 0.78 - ETA: 0s - loss: 0.5050 - accuracy: 0.78 - ETA: 0s - loss: 0.5051 - accuracy: 0.79 - ETA: 0s - loss: 0.4987 - accuracy: 0.79 - ETA: 0s - loss: 0.4930 - accuracy: 0.79 - ETA: 0s - loss: 0.4925 - accuracy: 0.79 - ETA: 0s - loss: 0.4979 - accuracy: 0.79 - ETA: 0s - loss: 0.5090 - accuracy: 0.79 - ETA: 0s - loss: 0.5101 - accuracy: 0.79 - ETA: 0s - loss: 0.5127 - accuracy: 0.78 - 3s 2ms/step - loss: 0.5132 - accuracy: 0.7887 - val_loss: 0.5639 - val_accuracy: 0.7941
Epoch 5/20
1344/1344 [==============================] - ETA: 2s - loss: 0.5969 - accuracy: 0.65 - ETA: 2s - loss: 0.6168 - accuracy: 0.68 - ETA: 2s - loss: 0.5043 - accuracy: 0.76 - ETA: 2s - loss: 0.4368 - accuracy: 0.78 - ETA: 2s - loss: 0.4489 - accuracy: 0.78 - ETA: 2s - loss: 0.4544 - accuracy: 0.77 - ETA: 2s - loss: 0.4292 - accuracy: 0.78 - ETA: 2s - loss: 0.4115 - accuracy: 0.79 - ETA: 2s - loss: 0.3957 - accuracy: 0.81 - ETA: 2s - loss: 0.3791 - accuracy: 0.82 - ETA: 1s - loss: 0.3684 - accuracy: 0.83 - ETA: 1s - loss: 0.3687 - accuracy: 0.83 - ETA: 1s - loss: 0.3732 - accuracy: 0.82 - ETA: 1s - loss: 0.3661 - accuracy: 0.83 - ETA: 1s - loss: 0.3492 - accuracy: 0.84 - ETA: 1s - loss: 0.3485 - accuracy: 0.83 - ETA: 1s - loss: 0.3515 - accuracy: 0.83 - ETA: 1s - loss: 0.3872 - accuracy: 0.83 - ETA: 1s - loss: 0.3974 - accuracy: 0.83 - ETA: 1s - loss: 0.3898 - accuracy: 0.83 - ETA: 1s - loss: 0.3860 - accuracy: 0.83 - ETA: 1s - loss: 0.3868 - accuracy: 0.83 - ETA: 1s - loss: 0.3903 - accuracy: 0.83 - ETA: 1s - loss: 0.4067 - accuracy: 0.82 - ETA: 1s - loss: 0.4144 - accuracy: 0.82 - ETA: 1s - loss: 0.4110 - accuracy: 0.81 - ETA: 0s - loss: 0.4057 - accuracy: 0.82 - ETA: 0s - loss: 0.3997 - accuracy: 0.82 - ETA: 0s - loss: 0.3971 - accuracy: 0.82 - ETA: 0s - loss: 0.3991 - accuracy: 0.82 - ETA: 0s - loss: 0.4027 - accuracy: 0.82 - ETA: 0s - loss: 0.4180 - accuracy: 0.82 - ETA: 0s - loss: 0.4306 - accuracy: 0.81 - ETA: 0s - loss: 0.4580 - accuracy: 0.80 - ETA: 0s - loss: 0.4906 - accuracy: 0.79 - ETA: 0s - loss: 0.4916 - accuracy: 0.79 - ETA: 0s - loss: 0.4863 - accuracy: 0.79 - ETA: 0s - loss: 0.4824 - accuracy: 0.79 - ETA: 0s - loss: 0.4837 - accuracy: 0.79 - ETA: 0s - loss: 0.4812 - accuracy: 0.79 - ETA: 0s - loss: 0.4792 - accuracy: 0.79 - 3s 2ms/step - loss: 0.4830 - accuracy: 0.7954 - val_loss: 0.4732 - val_accuracy: 0.8824
Epoch 6/20
1344/1344 [==============================] - ETA: 2s - loss: 0.3669 - accuracy: 0.84 - ETA: 2s - loss: 0.3001 - accuracy: 0.87 - ETA: 2s - loss: 0.3154 - accuracy: 0.86 - ETA: 2s - loss: 0.2840 - accuracy: 0.86 - ETA: 2s - loss: 0.2618 - accuracy: 0.88 - ETA: 2s - loss: 0.2704 - accuracy: 0.88 - ETA: 2s - loss: 0.2729 - accuracy: 0.88 - ETA: 2s - loss: 0.2714 - accuracy: 0.88 - ETA: 2s - loss: 0.2831 - accuracy: 0.87 - ETA: 2s - loss: 0.2753 - accuracy: 0.87 - ETA: 2s - loss: 0.2701 - accuracy: 0.87 - ETA: 1s - loss: 0.2752 - accuracy: 0.87 - ETA: 1s - loss: 0.3075 - accuracy: 0.86 - ETA: 1s - loss: 0.3182 - accuracy: 0.85 - ETA: 1s - loss: 0.3199 - accuracy: 0.85 - ETA: 1s - loss: 0.3120 - accuracy: 0.85 - ETA: 1s - loss: 0.3136 - accuracy: 0.85 - ETA: 1s - loss: 0.3157 - accuracy: 0.85 - ETA: 1s - loss: 0.3175 - accuracy: 0.85 - ETA: 1s - loss: 0.3131 - accuracy: 0.85 - ETA: 1s - loss: 0.3082 - accuracy: 0.85 - ETA: 1s - loss: 0.3041 - accuracy: 0.85 - ETA: 1s - loss: 0.3011 - accuracy: 0.85 - ETA: 1s - loss: 0.3293 - accuracy: 0.85 - ETA: 1s - loss: 0.3471 - accuracy: 0.84 - ETA: 1s - loss: 0.3446 - accuracy: 0.84 - ETA: 0s - loss: 0.3405 - accuracy: 0.84 - ETA: 0s - loss: 0.3344 - accuracy: 0.84 - ETA: 0s - loss: 0.3385 - accuracy: 0.84 - ETA: 0s - loss: 0.3362 - accuracy: 0.84 - ETA: 0s - loss: 0.3362 - accuracy: 0.84 - ETA: 0s - loss: 0.3426 - accuracy: 0.84 - ETA: 0s - loss: 0.3499 - accuracy: 0.84 - ETA: 0s - loss: 0.3485 - accuracy: 0.84 - ETA: 0s - loss: 0.3487 - accuracy: 0.84 - ETA: 0s - loss: 0.3527 - accuracy: 0.84 - ETA: 0s - loss: 0.3531 - accuracy: 0.84 - ETA: 0s - loss: 0.3611 - accuracy: 0.84 - ETA: 0s - loss: 0.3598 - accuracy: 0.84 - ETA: 0s - loss: 0.3596 - accuracy: 0.84 - ETA: 0s - loss: 0.3573 - accuracy: 0.84 - 3s 2ms/step - loss: 0.3606 - accuracy: 0.8430 - val_loss: 0.8039 - val_accuracy: 0.7500
Epoch 7/20
1344/1344 [==============================] - ETA: 2s - loss: 0.4513 - accuracy: 0.81 - ETA: 2s - loss: 0.5940 - accuracy: 0.78 - ETA: 2s - loss: 0.5563 - accuracy: 0.77 - ETA: 2s - loss: 0.4630 - accuracy: 0.81 - ETA: 2s - loss: 0.4287 - accuracy: 0.82 - ETA: 2s - loss: 0.3990 - accuracy: 0.83 - ETA: 2s - loss: 0.3709 - accuracy: 0.84 - ETA: 2s - loss: 0.3831 - accuracy: 0.83 - ETA: 2s - loss: 0.3660 - accuracy: 0.84 - ETA: 2s - loss: 0.3483 - accuracy: 0.84 - ETA: 2s - loss: 0.3544 - accuracy: 0.83 - ETA: 2s - loss: 0.3467 - accuracy: 0.84 - ETA: 2s - loss: 0.3496 - accuracy: 0.84 - ETA: 1s - loss: 0.3524 - accuracy: 0.84 - ETA: 1s - loss: 0.3547 - accuracy: 0.84 - ETA: 1s - loss: 0.3548 - accuracy: 0.84 - ETA: 1s - loss: 0.3577 - accuracy: 0.83 - ETA: 1s - loss: 0.3662 - accuracy: 0.83 - ETA: 1s - loss: 0.3720 - accuracy: 0.83 - ETA: 1s - loss: 0.3614 - accuracy: 0.83 - ETA: 1s - loss: 0.3525 - accuracy: 0.84 - ETA: 1s - loss: 0.3560 - accuracy: 0.84 - ETA: 1s - loss: 0.3512 - accuracy: 0.84 - ETA: 1s - loss: 0.3479 - accuracy: 0.84 - ETA: 1s - loss: 0.3465 - accuracy: 0.84 - ETA: 1s - loss: 0.3488 - accuracy: 0.84 - ETA: 1s - loss: 0.3482 - accuracy: 0.84 - ETA: 0s - loss: 0.3418 - accuracy: 0.84 - ETA: 0s - loss: 0.3395 - accuracy: 0.84 - ETA: 0s - loss: 0.3338 - accuracy: 0.84 - ETA: 0s - loss: 0.3291 - accuracy: 0.85 - ETA: 0s - loss: 0.3237 - accuracy: 0.85 - ETA: 0s - loss: 0.3244 - accuracy: 0.85 - ETA: 0s - loss: 0.3291 - accuracy: 0.84 - ETA: 0s - loss: 0.3279 - accuracy: 0.85 - ETA: 0s - loss: 0.3240 - accuracy: 0.85 - ETA: 0s - loss: 0.3221 - accuracy: 0.85 - ETA: 0s - loss: 0.3189 - accuracy: 0.85 - ETA: 0s - loss: 0.3287 - accuracy: 0.85 - ETA: 0s - loss: 0.3349 - accuracy: 0.85 - ETA: 0s - loss: 0.3314 - accuracy: 0.85 - 3s 2ms/step - loss: 0.3313 - accuracy: 0.8519 - val_loss: 0.6224 - val_accuracy: 0.8529
Epoch 8/20
1344/1344 [==============================] - ETA: 2s - loss: 0.3247 - accuracy: 0.81 - ETA: 2s - loss: 0.4303 - accuracy: 0.76 - ETA: 2s - loss: 0.3581 - accuracy: 0.80 - ETA: 2s - loss: 0.3180 - accuracy: 0.82 - ETA: 2s - loss: 0.2781 - accuracy: 0.86 - ETA: 2s - loss: 0.2877 - accuracy: 0.86 - ETA: 2s - loss: 0.2668 - accuracy: 0.88 - ETA: 2s - loss: 0.2627 - accuracy: 0.88 - ETA: 2s - loss: 0.2473 - accuracy: 0.88 - ETA: 2s - loss: 0.2338 - accuracy: 0.89 - ETA: 2s - loss: 0.2311 - accuracy: 0.89 - ETA: 2s - loss: 0.2198 - accuracy: 0.90 - ETA: 2s - loss: 0.2176 - accuracy: 0.90 - ETA: 1s - loss: 0.2200 - accuracy: 0.90 - ETA: 1s - loss: 0.2274 - accuracy: 0.90 - ETA: 1s - loss: 0.2265 - accuracy: 0.90 - ETA: 1s - loss: 0.2245 - accuracy: 0.90 - ETA: 1s - loss: 0.2216 - accuracy: 0.90 - ETA: 1s - loss: 0.2210 - accuracy: 0.91 - ETA: 1s - loss: 0.2181 - accuracy: 0.91 - ETA: 1s - loss: 0.2140 - accuracy: 0.91 - ETA: 1s - loss: 0.2092 - accuracy: 0.91 - ETA: 1s - loss: 0.2469 - accuracy: 0.90 - ETA: 1s - loss: 0.2764 - accuracy: 0.89 - ETA: 1s - loss: 0.3008 - accuracy: 0.88 - ETA: 1s - loss: 0.3095 - accuracy: 0.88 - ETA: 1s - loss: 0.3014 - accuracy: 0.88 - ETA: 0s - loss: 0.2956 - accuracy: 0.88 - ETA: 0s - loss: 0.2931 - accuracy: 0.88 - ETA: 0s - loss: 0.2942 - accuracy: 0.88 - ETA: 0s - loss: 0.3053 - accuracy: 0.88 - ETA: 0s - loss: 0.3087 - accuracy: 0.88 - ETA: 0s - loss: 0.3016 - accuracy: 0.88 - ETA: 0s - loss: 0.2955 - accuracy: 0.88 - ETA: 0s - loss: 0.2932 - accuracy: 0.88 - ETA: 0s - loss: 0.2904 - accuracy: 0.88 - ETA: 0s - loss: 0.2841 - accuracy: 0.89 - ETA: 0s - loss: 0.2830 - accuracy: 0.89 - ETA: 0s - loss: 0.2826 - accuracy: 0.89 - ETA: 0s - loss: 0.2804 - accuracy: 0.89 - ETA: 0s - loss: 0.2767 - accuracy: 0.89 - 3s 2ms/step - loss: 0.2751 - accuracy: 0.8943 - val_loss: 0.4433 - val_accuracy: 0.8529
Epoch 9/20
1344/1344 [==============================] - ETA: 2s - loss: 0.0709 - accuracy: 1.00 - ETA: 2s - loss: 0.0625 - accuracy: 1.00 - ETA: 2s - loss: 0.0657 - accuracy: 0.98 - ETA: 2s - loss: 0.0942 - accuracy: 0.98 - ETA: 2s - loss: 0.0986 - accuracy: 0.97 - ETA: 2s - loss: 0.1012 - accuracy: 0.96 - ETA: 2s - loss: 0.0982 - accuracy: 0.96 - ETA: 2s - loss: 0.0982 - accuracy: 0.96 - ETA: 2s - loss: 0.1025 - accuracy: 0.96 - ETA: 1s - loss: 0.1234 - accuracy: 0.95 - ETA: 1s - loss: 0.1492 - accuracy: 0.95 - ETA: 1s - loss: 0.1542 - accuracy: 0.95 - ETA: 1s - loss: 0.1840 - accuracy: 0.93 - ETA: 1s - loss: 0.1918 - accuracy: 0.93 - ETA: 1s - loss: 0.1909 - accuracy: 0.93 - ETA: 1s - loss: 0.2006 - accuracy: 0.92 - ETA: 1s - loss: 0.1982 - accuracy: 0.92 - ETA: 1s - loss: 0.1896 - accuracy: 0.92 - ETA: 1s - loss: 0.1911 - accuracy: 0.92 - ETA: 1s - loss: 0.1863 - accuracy: 0.92 - ETA: 1s - loss: 0.1879 - accuracy: 0.92 - ETA: 1s - loss: 0.1859 - accuracy: 0.92 - ETA: 1s - loss: 0.1855 - accuracy: 0.92 - ETA: 1s - loss: 0.1819 - accuracy: 0.92 - ETA: 1s - loss: 0.1833 - accuracy: 0.92 - ETA: 1s - loss: 0.1827 - accuracy: 0.92 - ETA: 0s - loss: 0.1876 - accuracy: 0.92 - ETA: 0s - loss: 0.2000 - accuracy: 0.91 - ETA: 0s - loss: 0.2152 - accuracy: 0.91 - ETA: 0s - loss: 0.2180 - accuracy: 0.91 - ETA: 0s - loss: 0.2142 - accuracy: 0.91 - ETA: 0s - loss: 0.2103 - accuracy: 0.91 - ETA: 0s - loss: 0.2085 - accuracy: 0.91 - ETA: 0s - loss: 0.2071 - accuracy: 0.91 - ETA: 0s - loss: 0.2060 - accuracy: 0.91 - ETA: 0s - loss: 0.2063 - accuracy: 0.91 - ETA: 0s - loss: 0.2024 - accuracy: 0.91 - ETA: 0s - loss: 0.1996 - accuracy: 0.91 - ETA: 0s - loss: 0.1963 - accuracy: 0.92 - ETA: 0s - loss: 0.1940 - accuracy: 0.92 - ETA: 0s - loss: 0.2024 - accuracy: 0.91 - 3s 2ms/step - loss: 0.2231 - accuracy: 0.9144 - val_loss: 0.6862 - val_accuracy: 0.8529
Epoch 10/20
1344/1344 [==============================] - ETA: 2s - loss: 0.2740 - accuracy: 0.84 - ETA: 2s - loss: 0.2578 - accuracy: 0.82 - ETA: 2s - loss: 0.1929 - accuracy: 0.88 - ETA: 2s - loss: 0.2100 - accuracy: 0.89 - ETA: 2s - loss: 0.1888 - accuracy: 0.90 - ETA: 2s - loss: 0.1747 - accuracy: 0.91 - ETA: 2s - loss: 0.1851 - accuracy: 0.91 - ETA: 2s - loss: 0.1901 - accuracy: 0.91 - ETA: 2s - loss: 0.1848 - accuracy: 0.91 - ETA: 2s - loss: 0.2044 - accuracy: 0.90 - ETA: 1s - loss: 0.2013 - accuracy: 0.90 - ETA: 1s - loss: 0.1945 - accuracy: 0.91 - ETA: 1s - loss: 0.1873 - accuracy: 0.91 - ETA: 1s - loss: 0.1820 - accuracy: 0.92 - ETA: 1s - loss: 0.1770 - accuracy: 0.92 - ETA: 1s - loss: 0.1694 - accuracy: 0.92 - ETA: 1s - loss: 0.1621 - accuracy: 0.93 - ETA: 1s - loss: 0.1591 - accuracy: 0.93 - ETA: 1s - loss: 0.1543 - accuracy: 0.93 - ETA: 1s - loss: 0.1492 - accuracy: 0.93 - ETA: 1s - loss: 0.1450 - accuracy: 0.93 - ETA: 1s - loss: 0.1460 - accuracy: 0.93 - ETA: 1s - loss: 0.1646 - accuracy: 0.92 - ETA: 1s - loss: 0.1759 - accuracy: 0.92 - ETA: 1s - loss: 0.1795 - accuracy: 0.91 - ETA: 0s - loss: 0.1853 - accuracy: 0.91 - ETA: 0s - loss: 0.1838 - accuracy: 0.91 - ETA: 0s - loss: 0.1822 - accuracy: 0.91 - ETA: 0s - loss: 0.1847 - accuracy: 0.91 - ETA: 0s - loss: 0.1871 - accuracy: 0.91 - ETA: 0s - loss: 0.1842 - accuracy: 0.91 - ETA: 0s - loss: 0.1805 - accuracy: 0.91 - ETA: 0s - loss: 0.1812 - accuracy: 0.91 - ETA: 0s - loss: 0.1810 - accuracy: 0.91 - ETA: 0s - loss: 0.1793 - accuracy: 0.91 - ETA: 0s - loss: 0.1749 - accuracy: 0.92 - ETA: 0s - loss: 0.1724 - accuracy: 0.92 - ETA: 0s - loss: 0.1725 - accuracy: 0.92 - ETA: 0s - loss: 0.1809 - accuracy: 0.91 - ETA: 0s - loss: 0.1977 - accuracy: 0.91 - ETA: 0s - loss: 0.2011 - accuracy: 0.91 - 3s 2ms/step - loss: 0.1983 - accuracy: 0.9137 - val_loss: 0.6156 - val_accuracy: 0.8529
Epoch 11/20
1344/1344 [==============================] - ETA: 2s - loss: 0.2710 - accuracy: 0.90 - ETA: 2s - loss: 0.2942 - accuracy: 0.90 - ETA: 2s - loss: 0.2402 - accuracy: 0.91 - ETA: 2s - loss: 0.1999 - accuracy: 0.93 - ETA: 2s - loss: 0.1650 - accuracy: 0.95 - ETA: 2s - loss: 0.1456 - accuracy: 0.95 - ETA: 1s - loss: 0.1413 - accuracy: 0.95 - ETA: 1s - loss: 0.1265 - accuracy: 0.96 - ETA: 1s - loss: 0.1273 - accuracy: 0.96 - ETA: 1s - loss: 0.1182 - accuracy: 0.96 - ETA: 1s - loss: 0.1153 - accuracy: 0.96 - ETA: 1s - loss: 0.1094 - accuracy: 0.96 - ETA: 1s - loss: 0.1088 - accuracy: 0.96 - ETA: 1s - loss: 0.1088 - accuracy: 0.96 - ETA: 1s - loss: 0.1117 - accuracy: 0.96 - ETA: 1s - loss: 0.1285 - accuracy: 0.96 - ETA: 1s - loss: 0.1367 - accuracy: 0.95 - ETA: 1s - loss: 0.1572 - accuracy: 0.94 - ETA: 1s - loss: 0.1964 - accuracy: 0.93 - ETA: 1s - loss: 0.2099 - accuracy: 0.92 - ETA: 1s - loss: 0.2137 - accuracy: 0.92 - ETA: 1s - loss: 0.2063 - accuracy: 0.92 - ETA: 1s - loss: 0.2000 - accuracy: 0.92 - ETA: 1s - loss: 0.1953 - accuracy: 0.92 - ETA: 1s - loss: 0.1947 - accuracy: 0.93 - ETA: 1s - loss: 0.1905 - accuracy: 0.93 - ETA: 0s - loss: 0.1854 - accuracy: 0.93 - ETA: 0s - loss: 0.1799 - accuracy: 0.93 - ETA: 0s - loss: 0.1782 - accuracy: 0.93 - ETA: 0s - loss: 0.1767 - accuracy: 0.93 - ETA: 0s - loss: 0.1724 - accuracy: 0.93 - ETA: 0s - loss: 0.1699 - accuracy: 0.93 - ETA: 0s - loss: 0.1692 - accuracy: 0.93 - ETA: 0s - loss: 0.1653 - accuracy: 0.94 - ETA: 0s - loss: 0.1634 - accuracy: 0.94 - ETA: 0s - loss: 0.1638 - accuracy: 0.94 - ETA: 0s - loss: 0.1662 - accuracy: 0.94 - ETA: 0s - loss: 0.1668 - accuracy: 0.93 - ETA: 0s - loss: 0.1702 - accuracy: 0.93 - ETA: 0s - loss: 0.1769 - accuracy: 0.93 - ETA: 0s - loss: 0.1764 - accuracy: 0.93 - 3s 2ms/step - loss: 0.1774 - accuracy: 0.9345 - val_loss: 0.5988 - val_accuracy: 0.7353
Epoch 12/20
1344/1344 [==============================] - ETA: 2s - loss: 0.1487 - accuracy: 0.96 - ETA: 2s - loss: 0.1142 - accuracy: 0.96 - ETA: 2s - loss: 0.0948 - accuracy: 0.97 - ETA: 2s - loss: 0.0988 - accuracy: 0.96 - ETA: 2s - loss: 0.1013 - accuracy: 0.96 - ETA: 2s - loss: 0.1206 - accuracy: 0.94 - ETA: 2s - loss: 0.1186 - accuracy: 0.95 - ETA: 2s - loss: 0.1098 - accuracy: 0.95 - ETA: 2s - loss: 0.1066 - accuracy: 0.95 - ETA: 1s - loss: 0.1084 - accuracy: 0.95 - ETA: 1s - loss: 0.0994 - accuracy: 0.96 - ETA: 1s - loss: 0.0945 - accuracy: 0.96 - ETA: 1s - loss: 0.0948 - accuracy: 0.96 - ETA: 1s - loss: 0.0968 - accuracy: 0.96 - ETA: 1s - loss: 0.0990 - accuracy: 0.95 - ETA: 1s - loss: 0.1038 - accuracy: 0.95 - ETA: 1s - loss: 0.1161 - accuracy: 0.95 - ETA: 1s - loss: 0.1139 - accuracy: 0.95 - ETA: 1s - loss: 0.1114 - accuracy: 0.95 - ETA: 1s - loss: 0.1077 - accuracy: 0.95 - ETA: 1s - loss: 0.1106 - accuracy: 0.95 - ETA: 1s - loss: 0.1141 - accuracy: 0.95 - ETA: 1s - loss: 0.1128 - accuracy: 0.95 - ETA: 1s - loss: 0.1100 - accuracy: 0.95 - ETA: 1s - loss: 0.1061 - accuracy: 0.96 - ETA: 1s - loss: 0.1030 - accuracy: 0.96 - ETA: 0s - loss: 0.1024 - accuracy: 0.96 - ETA: 0s - loss: 0.1031 - accuracy: 0.96 - ETA: 0s - loss: 0.1081 - accuracy: 0.95 - ETA: 0s - loss: 0.1135 - accuracy: 0.95 - ETA: 0s - loss: 0.1417 - accuracy: 0.94 - ETA: 0s - loss: 0.1659 - accuracy: 0.93 - ETA: 0s - loss: 0.1665 - accuracy: 0.93 - ETA: 0s - loss: 0.1641 - accuracy: 0.94 - ETA: 0s - loss: 0.1660 - accuracy: 0.93 - ETA: 0s - loss: 0.1628 - accuracy: 0.94 - ETA: 0s - loss: 0.1611 - accuracy: 0.94 - ETA: 0s - loss: 0.1595 - accuracy: 0.94 - ETA: 0s - loss: 0.1591 - accuracy: 0.94 - ETA: 0s - loss: 0.1591 - accuracy: 0.94 - ETA: 0s - loss: 0.1563 - accuracy: 0.94 - 3s 2ms/step - loss: 0.1538 - accuracy: 0.9435 - val_loss: 0.5033 - val_accuracy: 0.8235
Epoch 13/20
1344/1344 [==============================] - ETA: 2s - loss: 0.0250 - accuracy: 1.00 - ETA: 2s - loss: 0.0431 - accuracy: 1.00 - ETA: 2s - loss: 0.0489 - accuracy: 0.98 - ETA: 2s - loss: 0.0530 - accuracy: 0.98 - ETA: 2s - loss: 0.0567 - accuracy: 0.98 - ETA: 2s - loss: 0.0575 - accuracy: 0.97 - ETA: 2s - loss: 0.0537 - accuracy: 0.98 - ETA: 2s - loss: 0.0601 - accuracy: 0.97 - ETA: 1s - loss: 0.0548 - accuracy: 0.97 - ETA: 1s - loss: 0.0615 - accuracy: 0.97 - ETA: 1s - loss: 0.0710 - accuracy: 0.97 - ETA: 1s - loss: 0.0708 - accuracy: 0.97 - ETA: 1s - loss: 0.0730 - accuracy: 0.97 - ETA: 1s - loss: 0.0804 - accuracy: 0.96 - ETA: 1s - loss: 0.1220 - accuracy: 0.95 - ETA: 1s - loss: 0.1736 - accuracy: 0.92 - ETA: 1s - loss: 0.1874 - accuracy: 0.92 - ETA: 1s - loss: 0.1800 - accuracy: 0.92 - ETA: 1s - loss: 0.1733 - accuracy: 0.92 - ETA: 1s - loss: 0.1708 - accuracy: 0.92 - ETA: 1s - loss: 0.1641 - accuracy: 0.93 - ETA: 1s - loss: 0.1637 - accuracy: 0.93 - ETA: 1s - loss: 0.1585 - accuracy: 0.93 - ETA: 1s - loss: 0.1531 - accuracy: 0.93 - ETA: 1s - loss: 0.1477 - accuracy: 0.94 - ETA: 0s - loss: 0.1436 - accuracy: 0.94 - ETA: 0s - loss: 0.1386 - accuracy: 0.94 - ETA: 0s - loss: 0.1349 - accuracy: 0.94 - ETA: 0s - loss: 0.1315 - accuracy: 0.94 - ETA: 0s - loss: 0.1281 - accuracy: 0.95 - ETA: 0s - loss: 0.1250 - accuracy: 0.95 - ETA: 0s - loss: 0.1219 - accuracy: 0.95 - ETA: 0s - loss: 0.1218 - accuracy: 0.95 - ETA: 0s - loss: 0.1206 - accuracy: 0.95 - ETA: 0s - loss: 0.1232 - accuracy: 0.95 - ETA: 0s - loss: 0.1237 - accuracy: 0.95 - ETA: 0s - loss: 0.1258 - accuracy: 0.95 - ETA: 0s - loss: 0.1229 - accuracy: 0.95 - ETA: 0s - loss: 0.1227 - accuracy: 0.95 - ETA: 0s - loss: 0.1237 - accuracy: 0.95 - ETA: 0s - loss: 0.1238 - accuracy: 0.95 - 3s 2ms/step - loss: 0.1238 - accuracy: 0.9524 - val_loss: 0.8389 - val_accuracy: 0.7353
Epoch 14/20
1344/1344 [==============================] - ETA: 2s - loss: 0.4138 - accuracy: 0.81 - ETA: 2s - loss: 0.4770 - accuracy: 0.79 - ETA: 2s - loss: 0.5650 - accuracy: 0.78 - ETA: 2s - loss: 0.4706 - accuracy: 0.82 - ETA: 2s - loss: 0.3883 - accuracy: 0.85 - ETA: 2s - loss: 0.3322 - accuracy: 0.87 - ETA: 2s - loss: 0.2881 - accuracy: 0.89 - ETA: 2s - loss: 0.2562 - accuracy: 0.90 - ETA: 2s - loss: 0.2303 - accuracy: 0.91 - ETA: 1s - loss: 0.2152 - accuracy: 0.92 - ETA: 1s - loss: 0.1992 - accuracy: 0.92 - ETA: 1s - loss: 0.1914 - accuracy: 0.92 - ETA: 1s - loss: 0.1807 - accuracy: 0.93 - ETA: 1s - loss: 0.1706 - accuracy: 0.93 - ETA: 1s - loss: 0.1631 - accuracy: 0.93 - ETA: 1s - loss: 0.1566 - accuracy: 0.93 - ETA: 1s - loss: 0.1502 - accuracy: 0.94 - ETA: 1s - loss: 0.1422 - accuracy: 0.94 - ETA: 1s - loss: 0.1423 - accuracy: 0.94 - ETA: 1s - loss: 0.1407 - accuracy: 0.94 - ETA: 1s - loss: 0.1382 - accuracy: 0.94 - ETA: 1s - loss: 0.1332 - accuracy: 0.94 - ETA: 1s - loss: 0.1319 - accuracy: 0.94 - ETA: 1s - loss: 0.1300 - accuracy: 0.94 - ETA: 1s - loss: 0.1287 - accuracy: 0.95 - ETA: 1s - loss: 0.1269 - accuracy: 0.95 - ETA: 0s - loss: 0.1228 - accuracy: 0.95 - ETA: 0s - loss: 0.1209 - accuracy: 0.95 - ETA: 0s - loss: 0.1214 - accuracy: 0.95 - ETA: 0s - loss: 0.1225 - accuracy: 0.95 - ETA: 0s - loss: 0.1318 - accuracy: 0.94 - ETA: 0s - loss: 0.1375 - accuracy: 0.94 - ETA: 0s - loss: 0.1399 - accuracy: 0.94 - ETA: 0s - loss: 0.1365 - accuracy: 0.94 - ETA: 0s - loss: 0.1329 - accuracy: 0.94 - ETA: 0s - loss: 0.1312 - accuracy: 0.94 - ETA: 0s - loss: 0.1304 - accuracy: 0.94 - ETA: 0s - loss: 0.1271 - accuracy: 0.94 - ETA: 0s - loss: 0.1254 - accuracy: 0.95 - ETA: 0s - loss: 0.1237 - accuracy: 0.95 - ETA: 0s - loss: 0.1264 - accuracy: 0.94 - 3s 2ms/step - loss: 0.1353 - accuracy: 0.9435 - val_loss: 1.8640 - val_accuracy: 0.6176
Epoch 15/20
1344/1344 [==============================] - ETA: 2s - loss: 0.4815 - accuracy: 0.87 - ETA: 2s - loss: 0.2941 - accuracy: 0.92 - ETA: 2s - loss: 0.2119 - accuracy: 0.94 - ETA: 2s - loss: 0.1635 - accuracy: 0.96 - ETA: 2s - loss: 0.1446 - accuracy: 0.96 - ETA: 2s - loss: 0.1262 - accuracy: 0.96 - ETA: 2s - loss: 0.1117 - accuracy: 0.96 - ETA: 2s - loss: 0.1010 - accuracy: 0.97 - ETA: 2s - loss: 0.0943 - accuracy: 0.97 - ETA: 2s - loss: 0.0864 - accuracy: 0.97 - ETA: 1s - loss: 0.0879 - accuracy: 0.97 - ETA: 1s - loss: 0.0838 - accuracy: 0.97 - ETA: 1s - loss: 0.0795 - accuracy: 0.97 - ETA: 1s - loss: 0.0746 - accuracy: 0.97 - ETA: 1s - loss: 0.0703 - accuracy: 0.97 - ETA: 1s - loss: 0.0672 - accuracy: 0.97 - ETA: 1s - loss: 0.0673 - accuracy: 0.97 - ETA: 1s - loss: 0.0675 - accuracy: 0.97 - ETA: 1s - loss: 0.0682 - accuracy: 0.97 - ETA: 1s - loss: 0.0737 - accuracy: 0.97 - ETA: 1s - loss: 0.0719 - accuracy: 0.97 - ETA: 1s - loss: 0.0702 - accuracy: 0.97 - ETA: 1s - loss: 0.0699 - accuracy: 0.97 - ETA: 1s - loss: 0.0679 - accuracy: 0.97 - ETA: 1s - loss: 0.0681 - accuracy: 0.97 - ETA: 1s - loss: 0.0691 - accuracy: 0.97 - ETA: 0s - loss: 0.0799 - accuracy: 0.97 - ETA: 0s - loss: 0.0844 - accuracy: 0.96 - ETA: 0s - loss: 0.0856 - accuracy: 0.96 - ETA: 0s - loss: 0.0868 - accuracy: 0.96 - ETA: 0s - loss: 0.0844 - accuracy: 0.96 - ETA: 0s - loss: 0.0833 - accuracy: 0.96 - ETA: 0s - loss: 0.0840 - accuracy: 0.96 - ETA: 0s - loss: 0.0873 - accuracy: 0.96 - ETA: 0s - loss: 0.0879 - accuracy: 0.96 - ETA: 0s - loss: 0.0881 - accuracy: 0.96 - ETA: 0s - loss: 0.0863 - accuracy: 0.96 - ETA: 0s - loss: 0.0858 - accuracy: 0.96 - ETA: 0s - loss: 0.0865 - accuracy: 0.96 - ETA: 0s - loss: 0.0891 - accuracy: 0.96 - ETA: 0s - loss: 0.0878 - accuracy: 0.96 - 3s 2ms/step - loss: 0.0861 - accuracy: 0.9673 - val_loss: 0.6913 - val_accuracy: 0.8235
Epoch 16/20
1344/1344 [==============================] - ETA: 2s - loss: 0.0179 - accuracy: 1.00 - ETA: 2s - loss: 0.0156 - accuracy: 1.00 - ETA: 2s - loss: 0.0405 - accuracy: 0.98 - ETA: 2s - loss: 0.0463 - accuracy: 0.98 - ETA: 2s - loss: 0.0489 - accuracy: 0.97 - ETA: 2s - loss: 0.0522 - accuracy: 0.97 - ETA: 2s - loss: 0.0472 - accuracy: 0.97 - ETA: 2s - loss: 0.0432 - accuracy: 0.98 - ETA: 2s - loss: 0.0411 - accuracy: 0.98 - ETA: 2s - loss: 0.0380 - accuracy: 0.98 - ETA: 1s - loss: 0.0351 - accuracy: 0.98 - ETA: 1s - loss: 0.0331 - accuracy: 0.98 - ETA: 1s - loss: 0.0322 - accuracy: 0.98 - ETA: 1s - loss: 0.0334 - accuracy: 0.98 - ETA: 1s - loss: 0.0325 - accuracy: 0.98 - ETA: 1s - loss: 0.0307 - accuracy: 0.99 - ETA: 1s - loss: 0.0295 - accuracy: 0.99 - ETA: 1s - loss: 0.0301 - accuracy: 0.98 - ETA: 1s - loss: 0.0323 - accuracy: 0.98 - ETA: 1s - loss: 0.0324 - accuracy: 0.98 - ETA: 1s - loss: 0.0392 - accuracy: 0.98 - ETA: 1s - loss: 0.0788 - accuracy: 0.97 - ETA: 1s - loss: 0.1155 - accuracy: 0.97 - ETA: 1s - loss: 0.1235 - accuracy: 0.96 - ETA: 1s - loss: 0.1214 - accuracy: 0.96 - ETA: 1s - loss: 0.1178 - accuracy: 0.96 - ETA: 0s - loss: 0.1146 - accuracy: 0.96 - ETA: 0s - loss: 0.1110 - accuracy: 0.97 - ETA: 0s - loss: 0.1109 - accuracy: 0.96 - ETA: 0s - loss: 0.1081 - accuracy: 0.97 - ETA: 0s - loss: 0.1053 - accuracy: 0.97 - ETA: 0s - loss: 0.1023 - accuracy: 0.97 - ETA: 0s - loss: 0.0994 - accuracy: 0.97 - ETA: 0s - loss: 0.0967 - accuracy: 0.97 - ETA: 0s - loss: 0.0945 - accuracy: 0.97 - ETA: 0s - loss: 0.0921 - accuracy: 0.97 - ETA: 0s - loss: 0.0899 - accuracy: 0.97 - ETA: 0s - loss: 0.0883 - accuracy: 0.97 - ETA: 0s - loss: 0.0870 - accuracy: 0.97 - ETA: 0s - loss: 0.0853 - accuracy: 0.97 - ETA: 0s - loss: 0.0833 - accuracy: 0.97 - 3s 2ms/step - loss: 0.0818 - accuracy: 0.9792 - val_loss: 0.7547 - val_accuracy: 0.7647
Epoch 17/20
1344/1344 [==============================] - ETA: 2s - loss: 0.0133 - accuracy: 1.00 - ETA: 2s - loss: 0.0125 - accuracy: 1.00 - ETA: 2s - loss: 0.0213 - accuracy: 0.98 - ETA: 2s - loss: 0.1117 - accuracy: 0.95 - ETA: 2s - loss: 0.1797 - accuracy: 0.93 - ETA: 2s - loss: 0.1670 - accuracy: 0.93 - ETA: 2s - loss: 0.1639 - accuracy: 0.94 - ETA: 2s - loss: 0.1533 - accuracy: 0.94 - ETA: 2s - loss: 0.1402 - accuracy: 0.94 - ETA: 2s - loss: 0.1266 - accuracy: 0.95 - ETA: 1s - loss: 0.1197 - accuracy: 0.95 - ETA: 1s - loss: 0.1135 - accuracy: 0.95 - ETA: 1s - loss: 0.1070 - accuracy: 0.96 - ETA: 1s - loss: 0.1000 - accuracy: 0.96 - ETA: 1s - loss: 0.0941 - accuracy: 0.96 - ETA: 1s - loss: 0.0905 - accuracy: 0.96 - ETA: 1s - loss: 0.0860 - accuracy: 0.97 - ETA: 1s - loss: 0.0882 - accuracy: 0.97 - ETA: 1s - loss: 0.0887 - accuracy: 0.96 - ETA: 1s - loss: 0.0949 - accuracy: 0.96 - ETA: 1s - loss: 0.1000 - accuracy: 0.96 - ETA: 1s - loss: 0.1009 - accuracy: 0.96 - ETA: 1s - loss: 0.0984 - accuracy: 0.96 - ETA: 1s - loss: 0.0962 - accuracy: 0.96 - ETA: 1s - loss: 0.0928 - accuracy: 0.96 - ETA: 1s - loss: 0.0918 - accuracy: 0.96 - ETA: 0s - loss: 0.0891 - accuracy: 0.96 - ETA: 0s - loss: 0.0878 - accuracy: 0.96 - ETA: 0s - loss: 0.0853 - accuracy: 0.96 - ETA: 0s - loss: 0.0831 - accuracy: 0.96 - ETA: 0s - loss: 0.0814 - accuracy: 0.96 - ETA: 0s - loss: 0.0790 - accuracy: 0.96 - ETA: 0s - loss: 0.0790 - accuracy: 0.96 - ETA: 0s - loss: 0.0793 - accuracy: 0.96 - ETA: 0s - loss: 0.0774 - accuracy: 0.97 - ETA: 0s - loss: 0.0759 - accuracy: 0.97 - ETA: 0s - loss: 0.0761 - accuracy: 0.97 - ETA: 0s - loss: 0.0744 - accuracy: 0.97 - ETA: 0s - loss: 0.0729 - accuracy: 0.97 - ETA: 0s - loss: 0.0721 - accuracy: 0.97 - ETA: 0s - loss: 0.0709 - accuracy: 0.97 - 3s 2ms/step - loss: 0.0710 - accuracy: 0.9732 - val_loss: 0.6009 - val_accuracy: 0.8529
Epoch 18/20
1344/1344 [==============================] - ETA: 2s - loss: 0.0096 - accuracy: 1.00 - ETA: 2s - loss: 0.0352 - accuracy: 0.98 - ETA: 2s - loss: 0.1241 - accuracy: 0.95 - ETA: 2s - loss: 0.1279 - accuracy: 0.95 - ETA: 2s - loss: 0.1135 - accuracy: 0.95 - ETA: 2s - loss: 0.1042 - accuracy: 0.96 - ETA: 2s - loss: 0.0908 - accuracy: 0.96 - ETA: 2s - loss: 0.0828 - accuracy: 0.97 - ETA: 2s - loss: 0.0842 - accuracy: 0.96 - ETA: 2s - loss: 0.0774 - accuracy: 0.97 - ETA: 1s - loss: 0.0709 - accuracy: 0.97 - ETA: 1s - loss: 0.0658 - accuracy: 0.97 - ETA: 1s - loss: 0.0612 - accuracy: 0.97 - ETA: 1s - loss: 0.0578 - accuracy: 0.97 - ETA: 1s - loss: 0.0551 - accuracy: 0.98 - ETA: 1s - loss: 0.0523 - accuracy: 0.98 - ETA: 1s - loss: 0.0494 - accuracy: 0.98 - ETA: 1s - loss: 0.0470 - accuracy: 0.98 - ETA: 1s - loss: 0.0541 - accuracy: 0.98 - ETA: 1s - loss: 0.0585 - accuracy: 0.98 - ETA: 1s - loss: 0.0609 - accuracy: 0.98 - ETA: 1s - loss: 0.0811 - accuracy: 0.97 - ETA: 1s - loss: 0.1057 - accuracy: 0.96 - ETA: 1s - loss: 0.1456 - accuracy: 0.95 - ETA: 1s - loss: 0.1550 - accuracy: 0.95 - ETA: 0s - loss: 0.1643 - accuracy: 0.95 - ETA: 0s - loss: 0.1591 - accuracy: 0.95 - ETA: 0s - loss: 0.1575 - accuracy: 0.95 - ETA: 0s - loss: 0.1544 - accuracy: 0.95 - ETA: 0s - loss: 0.1498 - accuracy: 0.95 - ETA: 0s - loss: 0.1458 - accuracy: 0.95 - ETA: 0s - loss: 0.1414 - accuracy: 0.95 - ETA: 0s - loss: 0.1374 - accuracy: 0.95 - ETA: 0s - loss: 0.1354 - accuracy: 0.95 - ETA: 0s - loss: 0.1321 - accuracy: 0.95 - ETA: 0s - loss: 0.1297 - accuracy: 0.96 - ETA: 0s - loss: 0.1313 - accuracy: 0.95 - ETA: 0s - loss: 0.1423 - accuracy: 0.95 - ETA: 0s - loss: 0.1461 - accuracy: 0.95 - ETA: 0s - loss: 0.1427 - accuracy: 0.95 - ETA: 0s - loss: 0.1415 - accuracy: 0.95 - 3s 2ms/step - loss: 0.1387 - accuracy: 0.9554 - val_loss: 0.6102 - val_accuracy: 0.7794
Epoch 19/20
1344/1344 [==============================] - ETA: 2s - loss: 0.0052 - accuracy: 1.00 - ETA: 2s - loss: 0.0082 - accuracy: 1.00 - ETA: 2s - loss: 0.0125 - accuracy: 1.00 - ETA: 2s - loss: 0.0215 - accuracy: 1.00 - ETA: 2s - loss: 0.0193 - accuracy: 1.00 - ETA: 2s - loss: 0.0218 - accuracy: 0.99 - ETA: 2s - loss: 0.0221 - accuracy: 0.99 - ETA: 2s - loss: 0.0212 - accuracy: 0.99 - ETA: 2s - loss: 0.0202 - accuracy: 0.99 - ETA: 1s - loss: 0.0195 - accuracy: 0.99 - ETA: 1s - loss: 0.0180 - accuracy: 0.99 - ETA: 1s - loss: 0.0174 - accuracy: 0.99 - ETA: 1s - loss: 0.0165 - accuracy: 0.99 - ETA: 1s - loss: 0.0180 - accuracy: 0.99 - ETA: 1s - loss: 0.0192 - accuracy: 0.99 - ETA: 1s - loss: 0.0191 - accuracy: 0.99 - ETA: 1s - loss: 0.0186 - accuracy: 0.99 - ETA: 1s - loss: 0.0179 - accuracy: 0.99 - ETA: 1s - loss: 0.0187 - accuracy: 0.99 - ETA: 1s - loss: 0.0194 - accuracy: 0.99 - ETA: 1s - loss: 0.0305 - accuracy: 0.99 - ETA: 1s - loss: 0.0494 - accuracy: 0.98 - ETA: 1s - loss: 0.1051 - accuracy: 0.97 - ETA: 1s - loss: 0.1255 - accuracy: 0.96 - ETA: 1s - loss: 0.1232 - accuracy: 0.96 - ETA: 1s - loss: 0.1208 - accuracy: 0.96 - ETA: 0s - loss: 0.1169 - accuracy: 0.96 - ETA: 0s - loss: 0.1130 - accuracy: 0.96 - ETA: 0s - loss: 0.1115 - accuracy: 0.96 - ETA: 0s - loss: 0.1079 - accuracy: 0.96 - ETA: 0s - loss: 0.1055 - accuracy: 0.96 - ETA: 0s - loss: 0.1030 - accuracy: 0.96 - ETA: 0s - loss: 0.1008 - accuracy: 0.96 - ETA: 0s - loss: 0.0995 - accuracy: 0.96 - ETA: 0s - loss: 0.0972 - accuracy: 0.96 - ETA: 0s - loss: 0.0946 - accuracy: 0.96 - ETA: 0s - loss: 0.0926 - accuracy: 0.97 - ETA: 0s - loss: 0.0913 - accuracy: 0.97 - ETA: 0s - loss: 0.0894 - accuracy: 0.97 - ETA: 0s - loss: 0.0874 - accuracy: 0.97 - ETA: 0s - loss: 0.0862 - accuracy: 0.97 - 3s 2ms/step - loss: 0.0844 - accuracy: 0.9732 - val_loss: 0.7017 - val_accuracy: 0.8529
Epoch 20/20
1344/1344 [==============================] - ETA: 3s - loss: 0.0052 - accuracy: 1.00 - ETA: 2s - loss: 0.0041 - accuracy: 1.00 - ETA: 2s - loss: 0.0036 - accuracy: 1.00 - ETA: 2s - loss: 0.0040 - accuracy: 1.00 - ETA: 2s - loss: 0.0040 - accuracy: 1.00 - ETA: 2s - loss: 0.0045 - accuracy: 1.00 - ETA: 2s - loss: 0.0047 - accuracy: 1.00 - ETA: 2s - loss: 0.0041 - accuracy: 1.00 - ETA: 2s - loss: 0.0037 - accuracy: 1.00 - ETA: 2s - loss: 0.0057 - accuracy: 1.00 - ETA: 2s - loss: 0.0253 - accuracy: 0.99 - ETA: 2s - loss: 0.0244 - accuracy: 0.99 - ETA: 1s - loss: 0.0239 - accuracy: 0.99 - ETA: 1s - loss: 0.0224 - accuracy: 0.99 - ETA: 1s - loss: 0.0241 - accuracy: 0.99 - ETA: 1s - loss: 0.0726 - accuracy: 0.97 - ETA: 1s - loss: 0.1857 - accuracy: 0.95 - ETA: 1s - loss: 0.2001 - accuracy: 0.95 - ETA: 1s - loss: 0.1945 - accuracy: 0.95 - ETA: 1s - loss: 0.1861 - accuracy: 0.95 - ETA: 1s - loss: 0.1775 - accuracy: 0.95 - ETA: 1s - loss: 0.1696 - accuracy: 0.96 - ETA: 1s - loss: 0.1629 - accuracy: 0.96 - ETA: 1s - loss: 0.1568 - accuracy: 0.96 - ETA: 1s - loss: 0.1506 - accuracy: 0.96 - ETA: 1s - loss: 0.1452 - accuracy: 0.96 - ETA: 0s - loss: 0.1413 - accuracy: 0.96 - ETA: 0s - loss: 0.1396 - accuracy: 0.96 - ETA: 0s - loss: 0.1350 - accuracy: 0.96 - ETA: 0s - loss: 0.1314 - accuracy: 0.96 - ETA: 0s - loss: 0.1273 - accuracy: 0.97 - ETA: 0s - loss: 0.1236 - accuracy: 0.97 - ETA: 0s - loss: 0.1199 - accuracy: 0.97 - ETA: 0s - loss: 0.1176 - accuracy: 0.97 - ETA: 0s - loss: 0.1147 - accuracy: 0.97 - ETA: 0s - loss: 0.1120 - accuracy: 0.97 - ETA: 0s - loss: 0.1091 - accuracy: 0.97 - ETA: 0s - loss: 0.1063 - accuracy: 0.97 - ETA: 0s - loss: 0.1038 - accuracy: 0.97 - ETA: 0s - loss: 0.1046 - accuracy: 0.97 - ETA: 0s - loss: 0.1102 - accuracy: 0.97 - 3s 2ms/step - loss: 0.1113 - accuracy: 0.9725 - val_loss: 0.8205 - val_accuracy: 0.8529
In [64]:
test_labels = np.array([0 if 'slow_food' in f else 1 for f in test_batches.filenames])[:len(bottleneck_features_test)]
y_test_pred = model.predict_classes(bottleneck_features_test)
accuracy = np.count_nonzero(y_test_pred[:len(test_labels)].ravel() == test_labels)/len(test_labels)

print('\nThe accuracy is: '+str(accuracy))
The accuracy is: 0.8125
In [65]:
correct = 0
for i, f in enumerate(test_batches.filenames[:len(test_labels)]):
    if 'slow_food' in f and y_test_pred[i] == 0:
        correct +=1
    if 'fast_food' in f and y_test_pred[i] == 1:
        correct +=1

print('Correct predictions: '+str(correct/len(test_batches.filenames[:len(test_labels)])))
Correct predictions: 0.8125
In [66]:
plot_accuracy_loss(history_2)

This model is the most promising one.

In [67]:
cm = confusion_matrix(test_labels, np.round(y_test_pred[:len(test_labels)]))
cm_plot_labels = ['slow_food', 'fast_food']
In [68]:
plot_confusion_matrix(cm, cm_plot_labels, title='Confusion Matrix')
Confusion matrix, without normalization
[[117  12]
 [ 36  91]]
In [69]:
plot_confusion_matrix(cm, cm_plot_labels, title='Confusion Matrix', normalize=True)
Normalized confusion matrix
[[0.90697674 0.09302326]
 [0.28346457 0.71653543]]

Prediction on the test set are also much more accurate thane previous ones.

In [70]:
c = list(zip([i.split('\\')[1] for i in test_batches.filenames], y_test_pred))
my_list = random.shuffle(c)

filenames_3, preds_3 = zip(*c)
In [71]:
wrong_predictions_3 = plot_predictions(filenames_3, preds_3)
In [72]:
wrong_predictions_3
Out[72]:
['538.slow_food.jpg',
 '487.fast_food.jpg',
 '405.fast_food.jpg',
 '531.fast_food.jpg',
 '557.slow_food.jpg',
 '538.fast_food.jpg',
 '296.fast_food.jpg',
 '499.fast_food.jpg',
 '502.fast_food.jpg',
 '845.fast_food.jpg',
 '600.slow_food.jpg']